为了账号安全,请及时绑定邮箱和手机立即绑定

根据子组件的更改更新 Redux Store

根据子组件的更改更新 Redux Store

扬帆大鱼 2022-10-13 10:55:09
我是 React 和学习 Redux 的新手。我有一个包含两个子组件的容器组件。在其中一个子组件(标题组件)中,我有五个按钮。它的同级组件(Body 组件)根据在 Header 组件中单击的按钮呈现不同的视图。我知道我可以通过保持父组件中的状态并拥有一个事件处理函数来实现这一点,该函数在单击按钮时接收回调函数,但我正在尝试为更复杂的应用程序学习 Redux。为了实现这一点,我在 Parent 组件中引入了一个处理函数,它根据从传递给 Header 组件的回调函数接收到的数据调度一个动作,以更改存储,从而从 Body 组件呈现适当的视图。这是代码示例:父组件:...const mapStateToProps = state => {  return {    selectedDS: state.selectedDS  };};const mapDispatchToProps = dispatch => ({  changeDs: selectedDS => dispatch(changeDs(selectedDS)),  dispatch});class Main extends Component {  handleClick = button => {    this.props.dispatch(changeDs(button));  };  render() {    return (      <>        <div className="container">          <div id="header" className="row">            <Header handleClick={this.handleClick} />          </div>          <div className="row">            <DsComponent ds={this.props} />          </div>        </div>      </>    );  }}export default connect(  mapStateToProps,  mapDispatchToProps)(Main);我的问题是:代码有什么问题?如果我希望组件成为哑组件,那么在组件树中更深入地调度操作的最佳方法是什么?
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

问题 :


是你的reducer,你设置了错误的商店价值,你正在设置商店价值


var payload_ds = action.payload;

return Object.assign({}, state, { payload_ds });


// above line create json object something like this

// { selectedDS: 0 , payload_ds: { selectedDS: 4 } }

解决方案 :


var payload_ds = action.payload.selectedDS;

return Object.assign({}, state, { selectedDS: payload_ds }); // <----- HERE


// OR


// as there is only one field you can also use this one

return { selectedDS: payload_ds }

问:如果我希望组件成为哑组件,那么在组件树中更深入地调度操作的最佳方法是什么?

A :您可以mapDispatchToProps在将所有内容作为道具传递时使用它仍然被视为愚蠢的组件。


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信