如何为具有 redux 连接组件作为孙子的组件编写故事书故事?

Posted

技术标签:

【中文标题】如何为具有 redux 连接组件作为孙子的组件编写故事书故事?【英文标题】:How do I write a storybook story for a component that has redux-connected component as grandchild? 【发布时间】:2020-02-25 21:21:48 【问题描述】:

我们正在利用现有代码库构建 Storybook UI 库。编写代码时没有考虑到组件驱动的开发。在很多情况下,组件渲染连接到 Redux 存储的后代。

例如,父(连接)-> 子(未连接)-> 孙(连接)

现在,如果我正在为 Parent 构建故事,我了解如何将硬编码数据作为 prop 传递给直接子组件,以便一起避免 Redux。但是,当连接的组件嵌套更深时,我无法弄清楚如何做到这一点。

理想情况下,我根本不想在故事中使用 Redux,但即使我确实初始化了 Redux 存储并将父组件包装在 Provider 中,如 here 所述,这甚至可以连接孙子组件?

任何想法都会有所帮助。

【问题讨论】:

【参考方案1】:

使用storybook 时,您可以为所有故事添加Decorator(有关最新API,请参阅链接)。

通常将您的故事与状态经理商店提供商一起包装,以免破坏故事,避免“为每个故事添加 store

// @ config.js
import  configure,  addDecorator  from '@storybook/react';

import React from 'react';
import  createStore  from 'redux';
import  Provider  from 'react-redux';
import rootReducer from 'reducers/root.reducer';

const store = createStore(rootReducer);

addDecorator(S => (
  <Provider store=store>
    <S />
  </Provider>
));


configure(require.context('../src', true, /\.stories\.js$/), module);

请注意,您可以避免使用 redux-hooks connecting 所有组件,这还会删除所有 redux 的样板代码。

React Redux 现在提供一组钩子 API 作为现有 connect() 高阶组件的替代方案。这些 API 允许您订阅 Redux 存储和调度操作,而无需将组件包装在 connect() 中。

【讨论】:

使用storiesOf会怎样? 我明白了,只是有点困惑。谢谢

以上是关于如何为具有 redux 连接组件作为孙子的组件编写故事书故事?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何为样式化组件编写 Jest 测试用例并监视 css 以验证样式是不是正确?

如何为调用 reduxjs 的 mapStateToProps 的反应组件编写单元测试?

如何为 angular2 的登录组件编写测试(单元测试)

如何为具有分离数据源的 2 个反应组件更新 relayjs 缓存

如何为 Angular 组件注释 ngdoc?

酶 shallowWrapper.setState 不适用于 redux 连接的组件