javascript - Reactjs:setstate 渲染顺序问题
问题描述
我是使用 reactjs 的新手。我正在使用带有 onChange 句柄的 Select 元素。我使用 setState 保存选定的值:productFilterChosenValue。然后使用我的按钮“onClick”事件上的handleClick,我执行
this.setState({
productFilterChosenValue: this.state.productFilterValue,
});
因此,我让 productFilterChoseValue 仅在单击时使用当前 Select 值更新他的值。它工作得很好,因为如果我在我的 render() 函数中输入,{this.state.productFilterValue}
那么它只会在按钮单击时显示值变化。
但是如果我在底部添加一个组件(我自己的组件),给它作为 prop 相同的值
<FetchedTableGrid
apiRoute={
this.state.productFilterChosenValue
}
/>
它只会在点击 2 次后更新。所以我打印了我的值并正常工作,并且与第二次单击时更改状态的 prop 值相同。
在我的 FetchedTableGrid 组件中,我console.log(this.props);
尝试componentDidMount
并componentWillReceiveProps
得到了同样的错误。如果我使用componentWillUpdate
或者componentDidUpdate
它会无限循环。
解决方案
你不能这样做。问题是,如果您设置状态,那么state
更新并且由于setState
函数显式依赖于state
它被调用。因此是一个无限循环。
您需要做的是将先前的值作为输入传递给setState
:
this.setState((prevState) => ({
productFilterChosenValue: prevState.productFilterValue,
}));
推荐阅读
- security - 仅允许 OAuth2 API 的受信任应用程序
- python - Python 绘制具有集成的函数
- html - 在 CSS 中,“使 div 充当列”是什么意思?意思是?并将 div 居中
- ios - 在 plist 文件中使用用户定义的构建设置
- java - 如何使用 JUnit 5 在 Spring Boot 中捕获 Hibernate ConstraintViolationException(或 Spring DataIntegrityViolationException?)
- php - 如何使用 PHPMailer 发送自动回复邮件
- python - 在 python 中运行并行请求会话
- html - 如何在 Bootstrap 中制作工作子菜单?
- javascript - 在嵌套数组中查找和替换
- google-apps-script - 应用程序脚本循环通过 Google 表格和 cel 范围,然后将匹配的表格获取到文件 id,然后将数据复制到 id 文件