Lau*_*ter 20 javascript reactjs react-hooks
这两个是等价的吗?如果不是,哪个最好,为什么?
const [count, setCount] = useState(initialCount);
<button onClick={() => setCount(count + 1)}>+</button>
Run Code Online (Sandbox Code Playgroud)
const [count, setCount] = useState(initialCount);
<button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
Run Code Online (Sandbox Code Playgroud)
Edw*_*uza 20
如果下一个状态值取决于前一个值,如这个增量按钮示例,最好使用setState ( setCount(prevCount => prevCount + 1))的函数版本。
如果将 setter 函数传递到回调函数(如 onChange 或 HTTP 请求响应处理程序)中,则可能会遇到错误。
作为一个明确的例子,在下面的页面中,如果您单击“延迟计数器(基本)”,然后单击“立即计数器”,则计数只会增加 1。但是,如果您单击“延迟计数器(功能)”,然后通过“立即计数器”,计数最终将增加 2。
import React, { useState } from "react";
import ReactDOM from "react-dom";
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setTimeout(() => setCount(count + 1), 2000)}>
Delayed Counter (basic)
</button>
<button onClick={() => setTimeout(() => setCount(x => x + 1), 2000)}>
Delayed Counter (functional)
</button>
<button onClick={() => setCount(count + 1)}>Immediate Counter</button>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<Counter />, rootElement);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13283 次 |
| 最近记录: |