【发布时间】:2020-07-07 14:51:01
【问题描述】:
- 在下面的代码中,如何使
status变量的值在setStatus(!status)之后立即改变?我知道 React 中的状态更新是批处理的,因此我使用带有回调的useEffect,但在第一次单击按钮时status的值仍然记录为false(好像它没有立即更改)。 - 考虑到应用程序渲染不依赖于
status变量(实际上,我什至更希望这个变量的更改不会触发渲染),不使用@ 是不是一个不好的做法987654328@ 并将status改为“普通”变量,像status = true一样分配?
function App() {
const [status, setStatus] = React.useState(false)
React.useEffect(() => toggleStatus, [status])
function onClickHandler() {
toggleStatus()
console.log(status)
}
function toggleStatus() {
setStatus(!status)
}
return (
<div>
<button onClick={onClickHandler}>Toggle & log status</button>
</div>
)
}
ReactDOM.render( < App /> , document.getElementById('root'))
<script src="https://unpkg.com/react@^16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.13.0/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>
<div id="root"></div>
【问题讨论】:
-
请查看brewhouse.io/blog/2015/03/24/…。用于了解何时使用状态以及何时不使用状态
-
每当你用 setStatus 改变 status 的值,组件就会渲染,这正是 useState() 钩子的作用;
标签: javascript reactjs