我有一些类似于UIManager和Form的东西,我收到相当大的JSON
作为该组件的道具,我必须遍历此JSON
并分配onChangeFunction
到此JSON
的每个元素,然后使用新的JSON
渲染子代,我还将使用类似{{1 }}并且我还使用此formData在render中更新了上述JSON,因此子级的值很好(双向绑定)。
现在我正在这样做:
formData=[{ID:Value}]
我想知道是否应该这样做:
render () {
let newElementList = deepClone(props.elementList)
newElementList.forEach(element => {
if (!element.onChange) {
element.onChange = this.onElementChange();
}
})
//use newElementList from now on
}
哪个是更好的解决方案?
注意,我还对此componentDidMount() {
let newElementList = deepClone(props.elementList)
newElementList.forEach(element => {
if (!element.onChange) {
element.onChange = this.onElementChange();
}
})
this.setState({elementList: newElementList});
}
render ()
{
//use this.state.elementList from now on
}
做了一些其他更改,例如,我为每个更改的元素更新了value参数,并更新了JSON
。
答案 0 :(得分:1)
答案将取决于对JSON对象进行更新的位置,不是吗?
如果通过props传递的JSON对象仅仅是该组件的任意起点,那么只要所有更新都源自该组件和/或其子代,将其置于挂载状态应该适合您的目的。
但是,如果JSON数据由该组件的祖先操纵,则此解决方案将不起作用,因为仅在安装组件时才设置状态,并且组件将无法反映任何更改。在这种情况下,您希望继续将元素列表放到render中(如果您不希望其他更改触发渲染)或componentDidUpdate中(如果组件将经常重新渲染并且您不想处理JSON)。