import React, { Component } from "react";
export default class Comp extends Component {
constructor(props) {
super(props);
this.state = {
number: props.number,
};
const timer = setInterval(() => {
// this.setState({
// number: this.state.number - 1,
// });
this.setState((state) => ({
number: state.number - 1,
}));
if (this.state.number === 0) {
clearInterval(timer);
}
}, 1000);
}
render() {
// # 这里最后输出的是什么?
return <div>倒计时:{this.state.number}</div>;
}
}
调用上面组件传值时如下,请问倒计时最后输出的数字为什么是-1而不是0?
完整代码如下调用上面的组件:
import React from "react";
import ReactDOM from "react-dom/client";
import Tick from "./Tick";
const root = ReactDOM.createRoot(document.getElementById("root"));
const btn = (
<>
<Tick number={10} />
</>
);
root.render(btn);
这是React 18的特性, 可以参加这个https://reactjs.org/blog/2022...
简单来讲就是 在
setInterval
里面的setState也会合并在一起做更新, 所以这里的更新时异步的如果你想输出0的话, 就这样子
或者不用
createRoot
也行 (不过都上React18了, 这个就不建议了 )