Reactjs中的setState实现
我在查看ReactJS教程时,在以下几点上感到困惑: 当我们想要根据以前的状态更新当前状态时,我们应该调用setState的一个变量,它接受一个函数Reactjs中的setState实现,reactjs,Reactjs,我在查看ReactJS教程时,在以下几点上感到困惑: 当我们想要根据以前的状态更新当前状态时,我们应该调用setState的一个变量,它接受一个函数 this.setState(function(prevState, props) { return { counter: prevState.counter + props.increment }; }); 现在我的问题是,现在谁将以以前的状态调用此函数?就像我们用值直接调用setState一样,我们知道我们已经触发了工作流,将状
this.setState(function(prevState, props) {
return {
counter: prevState.counter + props.increment
};
});
现在我的问题是,现在谁将以以前的状态调用此函数?就像我们用值直接调用setState一样,我们知道我们已经触发了工作流,将状态设置为value。但是,在这种情况下,谁将调用此方法以及它如何知道要传递的参数,因为这是一个动态方法?
setState
函数将调用该函数
例如(实际设置状态函数并不只是为了显示概念)
setState
函数将调用该函数
例如(实际设置状态函数并不只是为了显示概念)
setState的当前签名
setState({state\u name:value})
设置状态(下一个状态,回调)
设置状态(回调)
使用setState
无法保证此.state
会立即更新,因此
调用此方法后访问this.state
,可能会返回旧的
因为React可以将多个setState()
调用批处理到一个更新中以提高性能
例如,下面一个是错误的,因为不能保证这个.state.counter
是更新的。
assuming count=1 initially.
this.setState({
counter: this.state.counter + 1
});
this.setState({
counter: this.state.counter + 1
});
计数器=1,而不是3
可以安全地假设setState
是异步的。
要修复它,请使用接受函数(回调)而不是对象的另一种形式的setState()
当一个函数被提供给setState
时,React将在中的某个点被调用
未来(不同步)。它将被称为最新的
组件参数(state、props、context
)
使用第三签名
assuming count=1 initially.
this.setState((state)=>({counter: state.counter + 1}))
this.setState((state)=>({counter: state.counter + 1}))
counter = 3
setState的当前签名
setState({state\u name:value})
设置状态(下一个状态,回调)
设置状态(回调)
使用setState
无法保证此.state
会立即更新,因此
调用此方法后访问this.state
,可能会返回旧的
因为React可以将多个setState()
调用批处理到一个更新中以提高性能
例如,下面一个是错误的,因为不能保证这个.state.counter
是更新的。
assuming count=1 initially.
this.setState({
counter: this.state.counter + 1
});
this.setState({
counter: this.state.counter + 1
});
计数器=1,而不是3
可以安全地假设setState
是异步的。
要修复它,请使用接受函数(回调)而不是对象的另一种形式的setState()
当一个函数被提供给setState
时,React将在中的某个点被调用
未来(不同步)。它将被称为最新的
组件参数(state、props、context
)
使用第三签名
assuming count=1 initially.
this.setState((state)=>({counter: state.counter + 1}))
this.setState((state)=>({counter: state.counter + 1}))
counter = 3
setState接受对象和函数作为参数。您可以使用this.setState(()=>{myState:'newState'})
并且仍然与this.setState({myState:'newState'})相同。
setState接受对象和函数作为参数。您可以使用this.setState(()=>{myState:'newState'})
并且仍然与this.setState({myState:'newState'})相同
Ok,但是在这里,param可以是具有不同类型输入的函数,对吗?或者它是固定的输入参数,它可以接收?那么,基本上setState是如何知道要传递哪些输入参数的呢?传递的函数将使用prevState对象调用。但是在本教程中,他们定义了一个函数,该函数同时接受prevState和Props?以及prevState和Props。正确。好的,但在这里,param可以是一个具有不同类型输入的函数,对吗?或者它是固定的输入参数,它可以接收?那么,基本上setState是如何知道要传递哪些输入参数的呢?传递的函数将使用prevState对象调用。但是在本教程中,他们定义了一个函数,该函数同时接受prevState和Props?以及prevState和Props。对的