React.js 小书 Lesson17 - 前端应用状态管理 —— 状态提升
React.js 小书 Lesson17 - 前端应用状态管理 —— 状态提升
转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huziketang.com/books/react 上一个评论功能的案例中,可能会有些同学会对一个地方感到疑惑: class CommentList extends Component { constructor () { this.state = { comments: [] } } addComment (comment) { this.state.comments.push(comment) this.setState({ comments: this.state.comments }) } render() { return ( <div> {this.state.comments.map((comment,i) => <Comment comment={comment} key={i} /> )} </div> ) } } 如果把这个
遇到这种情况,我们将这种组件之间共享的状态交给组件最近的公共父节点保管,然后通过
在我们的例子当中,如果把 但是这个 总结一下:当某个状态被多个组件依赖或者影响的时候,就把该状态提升到这些组件的最近公共父组件中去管理,用 我们来看看状态提升更多的例子,假设现在我们的父组件
而这个更大的组件树的另外的子树的 现在继续让我们的例子极端起来。假设现在 你会发现这种无限制的提升不是一个好的解决方案。一旦发生了提升,你就需要修改原来保存这个状态的组件的代码,也要把整个数据传递路径经过的组件都修改一遍,好让数据能够一层层地传递下去。这样对代码的组织管理维护带来很大的问题。到这里你可以抽象一下问题:
你可以看到 React.js 并没有提供好的解决方案来管理这种组件之间的共享状态。在实际项目当中状态提升并不是一个好的解决方案,所以我们后续会引入 Redux 这样的状态管理工具来帮助我们来管理这种共享状态,但是在讲解到 Redux 之前,我们暂时采取状态提升的方式来进行管理。 对于不会被多个组件依赖和影响的状态(例如某种下拉菜单的展开和收起状态),一般来说只需要保存在组件内部即可,不需要做提升或者特殊的管理。 下一节中我们将介绍《React.js 小书 Lesson18 - 挂载阶段的组件生命周期(一)》。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |