Bas*_*sit 4 javascript state reactjs
当我点击New Number button 时,我得到一个从 0 到 15 的随机数......这很好用,但现在我想要当我点击Previous Number button 时,它会给我以前的数字/状态。
例如..
渲染运行后,我得到 12。然后我单击给我 4 的新编号按钮,现在我想要当我单击上一个编号时,这会更改状态并给我之前处于状态的编号,它是 4。如何为了实现这个功能......
我知道componendDidUpdate有prevProp和prevState参数,但无法弄清楚如何在点击时调用它。这是我的代码
class App extends React.Component {
state = {
randomNum: ''
}
componentDidMount() {
this.getNewRandomNum()
}
getNewRandomNum = () => {
let randomNum = Math.floor(Math.random() * 15)
this.setState({ randomNum })
console.log(this.state.randomNum)
}
prevNum = () => {
}
render() {
return (
<div>
<h1>{this.state.randomNum}</h1>
<button onClick={this.getNewRandomNum}>New Number</button>
<button onClick={this.prevNum}>Previous Number</button>
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,希望我很清楚。
创建一个额外的状态值,如 previousNum,并在调用 getRandomNum 时使用 prevState 更新它。
class App extends React.Component {
state = {
randomNum: "",
previousNum: ""
};
componentDidMount() {
this.getNewRandomNum();
}
getNewRandomNum = () => {
let randomNum = Math.floor(Math.random() * 15);
this.setState(
prevState => {
return {
randomNum: randomNum,
previousNum: prevState.randomNum
};
},
() => console.log(this.state)
);
};
getPreviousNum = () => {
this.setState({
randomNum: this.state.previousNum,
previousNum: ""
}, () => console.log(this.state));
};
render() {
return (
<div>
<h1>{this.state.randomNum}</h1>
<button onClick={this.getNewRandomNum}>New Number</button>
<button
onClick={this.getPreviousNum}
disabled={typeof(this.state.previousNum) === "number" ? false : true}
>
Previous Number
</button>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
这里还有沙箱:https : //codesandbox.io/s/7345kyly21
我建议使用新状态如下:-
const [prevStart, setPrevStart] = useState(1);
const [page, setPage] = useState(1);
const handelPage = (getPage) => {
if (getPage < prevStart) {
///
}
if (getPage > prevStart) {
//
}
const target = `?page=${getPage}`
createBrowserHistory().push({
pathname: target,
});
setPrevStart(getPage);
setPage(getPage);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用 useRef 钩子来保存以前的状态。C
onst [name, setName] = useState("");
const prevName = useRef("");
useEffect(() => {
prevName.current = name;
},[name]);
return (
<>
{name}
{prevName.current}
</>
)
Run Code Online (Sandbox Code Playgroud)
像这样的事情就会解决这个问题。
谢谢
| 归档时间: |
|
| 查看次数: |
24463 次 |
| 最近记录: |