在Redux / React组件中改变道具值的正确方法是什么?

时间:2017-06-01 10:52:50

标签: javascript reactjs redux react-redux mutation

我有一个以String形式出现的数组(暂时无法更改)。 我收到String并需要在字符串化数组上执行JSON.parse(),以使其再次成为一个数组。 我无法在componentDidMount函数中执行此操作,因为在Redux中使用状态组件不是最佳实践。我可以在渲染功能中执行此操作,但就我所知,它并不是在那里改变值的最佳做法。

render() {
if (typeof this.props.detectedPersonListJson == 'string'){
      var array= JSON.parse(this.props.detectedPersonListJson);
    }  
 return (
      <div> 
    array.map(...)
</div>

那么如何在Redux的演示组件中管理道具变异呢? 谢谢!

2 个答案:

答案 0 :(得分:2)

如果你正在使用redux,我假设你已经在使用mapStateToProps函数,你可以在那里解析它并使其可用于React组件

function mapStateToProps(state) {
    var array;
    if (typeof state.detectedPersonListJson == 'string'){
      array= JSON.parse(state.detectedPersonListJson);
    }  
    return {
         detectedPersonListJson: array
    }

}

否则,您可以将prop保存为状态变量,因为您需要在componentWillReceivePropscomponentWillMount/componentDidMount生命周期函数中解析和设置State,因为componentWillMount仅被调用一次{{1此后每次渲染都会调用它。

答案 1 :(得分:1)

首先,我绝对不会在渲染函数中进行变异,因为它会被调用很多。 我建议的是阅读ComponentDidMount中的初始道具,在那里你相应地改变它们并将它存储在内部状态。之后,如果值可能会发生变化,那么我建议在ComponentWillReceiveProps中进行相同的变异。 我也不相信改变给定的道具来使用它们是一种非常糟糕的做法。只是尽量将突变保持在最低限度并使它们远离渲染功能。