在componentDidUpdate中做更多的事
React就是将不能避免更新任务的DOM转换成声名式的DOM。它以声名的方式将不可避名的行为转换为props和state的函数,从而得到相同的效果。 举个例子:

示例中我们构建一个界而查看和修改联系人. 在截图的右边部分, “contact #3” 包含未保存更改. 我们希望表单可以自动保存一旦用户浏览下一个联系人,在这里是 Contact #2.
一个聪明的方法就是实现一个方法在我们的主组件中,好像这样:
1
2
3
4
5
6
7
8
9
10
11
|
navigateToContact: function (newContactId) {
if ( this ._hasUnsavedChanges()) {
this ._saveChanges();
}
this .setState({
currentContactId: newContactId
});
}
…
navigateToContact(‘contact2’)
|
这是一个比较稚嫩的实现. 我们需要确保“contact #2”侧边栏菜单项和左下方的“< prev contact”点击事件的处理方法都链接到navigateToContact函数,而不是直接设置currentContactId的状态。
如果我们在componentDidUpdate中使用声明式的实现,就会是这样。
1
2
3
4
5
6
7
|
componentDidUpdate: function (prevProps, prevState) {
if (prevState.currentContactId !== state.currentContactId) {
if ( this ._hasUnsavedChanges()) {
this ._saveChanges();
}
}
}
|