下面的代码跳过我的文本的索引1,并且只显示“hllo world”
export default function App() {
const [message, setMessage] = useState("");
const index = useRef(0);
const text = "hello world";
useEffect(() => {
const interval = setInterval(() => {
setMessage((prevMessage) => prevMessage + text[index.current]);
index.current++;
}, 500);
return () => clearInterval(interval);
}, []);
return (
<div className="App">
<h1>{message}</h1>
</div>
);
}
但是如果我把这个集合状态改为
setMessage(text.substring(0, index.current));
这个很好用,我不知道是因为。
1条答案
按热度按时间yhqotfr81#
我想是因为你的回电
在使用setState时在队列中设置,并与索引的增量异步运行。可能存在数据争用。
当您使用substring方法时,您会立即得到您的字符串,因此它与增量完全同步。
请看一下这个文档,虽然我认为它并不明显,但是您的案例是setState异步特性的一个很好的例子。