我正在编写一个复杂的反应应用程序并使用Cortex作为我的中心模型。皮质的哲学是它包装你的数据和更改数据,从根调用完整的重新渲染。这非常有用,尤其是当您有非分层视图改变状态并影响另一个时。
我面临的问题是在重新渲染时保持状态/道具。例如,我有一个特定的层次结构,如下所示:
<Page>
<EditorCard>
<Editor/>
<PublishButton/>
</EditorCard>
</Page>
EditorCard
需要Editor
的JavaScript实例,以便在点击Editor
时对PublishButton
进行更改(我在{{}}内使用外部库1}}公开了编辑方法)。因此,Editor
上的Editor
通过调用传递给它的函数将实例设置为ComponentDidMount
上的prop
。
我的问题是,当我单击EditorCard
时,我更改了皮质对象的值,导致从根重新渲染,我松开了PublishButton
的道具(因为组件已经是挂起的Editor
不再被调用。)
我处理这个问题的方法是缓存ComponentDidMount
。
在getDefaultProps
内,我的默认道具是:
EditorCard
并将编辑器实例保存为 getDefaultProps: function() {
return {
cachedData: {},
}
},
这可以在多次重新渲染中保存道具。
这是如何使用this.props.cachedData.editor = editorInstance
缓存的吗?在通过多次重新渲染保存道具时,我打破了这个黑客的一些核心反应规则?如果是这样,你能建议一个更好的结构吗?
答案 0 :(得分:6)
不,getDefaultProps
就是它的意思:获取默认道具,以防所有者未将这些道具传递给您。你可以说它是a = this.props.bla || 'hello';
的简写。
话虽如此,如果我理解你的问题,我会看到三种方法来解决它。
在您的州内缓存该内容。道具由父母传递,并且应该从孩子内部读取,至少在香草React中。
为什么不把它放在componentDidMount
中,而不是让道具传递逻辑?
ref
可让您抓取实例并直接调用其方法。