reactjs - render() 中的 connect() ?

标签 reactjs redux react-redux

我有一个动态属性列表,我试图用它来为该列表中的每个对象实例化一个 React 组件。

这是我的 mapStateToProps()mapDispatchToProps() 的简化版本:

export function mapStateToProps(id) {
  return function(state) {
    return state.widgets.find((widget) => id === widget.id);
  };
}

export function mapDispatchToProps(id) {
  return function (dispatch) {
    return {
      fetchData: (path, props) => dispatch(fetchData(id, path, props)),
    };
  }; 
};

然后在父组件中:

render() {

  const widgets = this.props.widgets.map((widget) => {
    return connect(
      mapStateToProps(id),
      mapDispatchToProps(id),
    )(Widget);
  });

  return <div>{ widgets }</div>;
}

它不会抛出任何异常,但不会调用 mapStateToProps()mapDispatchToProps()

到目前为止我唯一的猜测是需要提前调用 connect() ,但我不确定如何使用动态 Prop 列表来做到这一点。有人对如何实现这项工作有任何想法吗?

最佳答案

mapStateToPropsmapDispatchToProps 都有第二个参数 ownProps。您可以在这些函数中获取传递的 props 并像导出任何其他容器一样导出连接的 Widget。

// WidgetContainer.js

function mapStateToProps(state, ownProps) {
  return state.widgets.find((widget) => ownProps.id === widget.id);
}

function mapDispatchToProps(dispatch, ownProps) {   
  return {
    fetchData: (path, props) => dispatch(fetchData(ownProps.id, path, props)),
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(Widget);

然后在你的循环中执行 @thedude 的建议:

return <div>{this.props.widgets.map(w => <Widget id={w.id} />)}</div>

文档:https://github.com/reactjs/react-redux/blob/master/docs/api.md

关于reactjs - render() 中的 connect() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43618435/

相关文章:

javascript - 在 react-redux 应用程序状态的数据结构中有一个 didInvalidate 属性的目的是什么?

arrays - 如何在reactjs的新选项卡中打开pdf?

javascript - reactJS 应用程序呈现包含数组的对象数组

reactjs - 如何为 React SSR 和 API 构建 monorepo

reactjs - 使用 Redux 表单对 FormSection 进行验证

javascript - 在单个页面上多次渲染 React/Redux 应用程序?

javascript - 使用 import as 将参数传递给combineReducers

javascript - 将数据获取到 React 组件并渲染它

javascript - React,如何以编程方式在组件单击时选择文本

javascript - 我可以在 Javascript 中再次导入吗?