如何在reactjs中获取先前的状态值

Bas*_*sit 4 javascript state reactjs

当我点击New Number button 时,我得到一个从 0 到 15 的随机数......这很好用,但现在我想要当我点击Previous Number button 时,它会给我以前的数字/状态。

例如..

渲染运行后,我得到 12。然后我单击给我 4 的新编号按钮,现在我想要当我单击上一个编号时,这会更改状态并给我之前处于状态的编号,它是 4。如何为了实现这个功能......

我知道componendDidUpdateprevPropprevState参数,但无法弄清楚如何在点击时调用它。这是我的代码

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)

感谢您的帮助,希望我很清楚。

Chr*_*Ngo 6

创建一个额外的状态值,如 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


Has*_*ran 5

我建议使用新状态如下:-

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)

像这样的事情就会解决这个问题。

谢谢