React 中对象的状态更新是如何准确工作的
How does the state updates of objects in React work accurately
我正在学习 React,并试图围绕语法和概念进行思考。从 React 的教程中提到:
State Updates May Be Asynchronous
React may batch multiple setState() calls into a single update for
performance.
Because this.props and this.state may be updated asynchronously, you
should not rely on their values for calculating the next state.
我的问题是,如果this.state不是一直更新,我们能靠它显示正确的信息吗?如果我的理解是正确的,React出于性能考虑会批量更新这个state,但是会影响应用的准确性吗? React 如何创建这些批次以及它们何时应用?
React 将在合理的情况下尽快渲染具有更新状态的组件 - 例如,在事件处理程序中,您可以更改多个组件的状态,但是单独使用新状态渲染它们是不合理的 - 相反,React 会事件处理程序完成后批量更新和呈现组件。
在正确编写的应用程序中,更新和渲染之间的延迟对用户来说是不明显的。从开发人员的角度来看,异步更新可能会引入 hard-to-find 错误(使用 Redux,其中每个状态更新都基于先前的状态应该可以解决大部分错误;这当然也可以在纯 React 中使用 setState()
和回调) .
React 使用状态来帮助管理 javascript 的每个组件。因为状态总是可以改变的,所以它非常灵活。一个缺点是,由于它很灵活,所以当有多个对象时很难管理状态。将组件保持在可管理的部分是理想的,这样您就可以在状态未按预期运行时进行定位。
为了防止数据意外变异,tools/concept ImmutableJs 或 Redux 等已与 React 相结合,使管理工具更加高效。
Redux controls/organizes 状态片段通过 one-directional 流改变。 http://redux.js.org/docs/basics/UsageWithReact.html
ImmutableJs 使用持久不变的数据结构来锁定状态以防止意外更改。 https://facebook.github.io/immutable-js/
状态是异步的并不意味着你不能依赖它,但你应该小心使用你保留在那里的信息的方式和时间。
例如:
this.setState({charCount: 5});
console.log(this.state.charCount) // may not be 5 as setState is asynchronous
另一方面,您可以使用回调来确保您获得了正确的值:
this.setState({charCount: 5}, () => { console.log(this.state.charCount) });
一般做法是,您应该尽量减少状态的使用,并且仅在用户界面需要更改时才使用它。如果您需要在没有 UI 更改的情况下处理或操作数据,请尝试避免使用状态并使用例如这种做法:Lifting State Up
我正在学习 React,并试图围绕语法和概念进行思考。从 React 的教程中提到:
State Updates May Be Asynchronous
React may batch multiple setState() calls into a single update for performance.
Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.
我的问题是,如果this.state不是一直更新,我们能靠它显示正确的信息吗?如果我的理解是正确的,React出于性能考虑会批量更新这个state,但是会影响应用的准确性吗? React 如何创建这些批次以及它们何时应用?
React 将在合理的情况下尽快渲染具有更新状态的组件 - 例如,在事件处理程序中,您可以更改多个组件的状态,但是单独使用新状态渲染它们是不合理的 - 相反,React 会事件处理程序完成后批量更新和呈现组件。
在正确编写的应用程序中,更新和渲染之间的延迟对用户来说是不明显的。从开发人员的角度来看,异步更新可能会引入 hard-to-find 错误(使用 Redux,其中每个状态更新都基于先前的状态应该可以解决大部分错误;这当然也可以在纯 React 中使用 setState()
和回调) .
React 使用状态来帮助管理 javascript 的每个组件。因为状态总是可以改变的,所以它非常灵活。一个缺点是,由于它很灵活,所以当有多个对象时很难管理状态。将组件保持在可管理的部分是理想的,这样您就可以在状态未按预期运行时进行定位。
为了防止数据意外变异,tools/concept ImmutableJs 或 Redux 等已与 React 相结合,使管理工具更加高效。
Redux controls/organizes 状态片段通过 one-directional 流改变。 http://redux.js.org/docs/basics/UsageWithReact.html
ImmutableJs 使用持久不变的数据结构来锁定状态以防止意外更改。 https://facebook.github.io/immutable-js/
状态是异步的并不意味着你不能依赖它,但你应该小心使用你保留在那里的信息的方式和时间。
例如:
this.setState({charCount: 5});
console.log(this.state.charCount) // may not be 5 as setState is asynchronous
另一方面,您可以使用回调来确保您获得了正确的值:
this.setState({charCount: 5}, () => { console.log(this.state.charCount) });
一般做法是,您应该尽量减少状态的使用,并且仅在用户界面需要更改时才使用它。如果您需要在没有 UI 更改的情况下处理或操作数据,请尝试避免使用状态并使用例如这种做法:Lifting State Up