我有一个以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的演示组件中管理道具变异呢? 谢谢!
答案 0 :(得分:2)
如果你正在使用redux,我假设你已经在使用mapStateToProps函数,你可以在那里解析它并使其可用于React组件
function mapStateToProps(state) {
var array;
if (typeof state.detectedPersonListJson == 'string'){
array= JSON.parse(state.detectedPersonListJson);
}
return {
detectedPersonListJson: array
}
}
否则,您可以将prop保存为状态变量,因为您需要在componentWillReceiveProps
和componentWillMount/componentDidMount
生命周期函数中解析和设置State,因为componentWillMount
仅被调用一次{{1此后每次渲染都会调用它。
答案 1 :(得分:1)
首先,我绝对不会在渲染函数中进行变异,因为它会被调用很多。 我建议的是阅读ComponentDidMount中的初始道具,在那里你相应地改变它们并将它存储在内部状态。之后,如果值可能会发生变化,那么我建议在ComponentWillReceiveProps中进行相同的变异。 我也不相信改变给定的道具来使用它们是一种非常糟糕的做法。只是尽量将突变保持在最低限度并使它们远离渲染功能。