React HookAPI useState()

useState是React Hook中声明变量的方法,useState提供了一个获取方法、一个设置方法

import React from 'react'; // useState是React的方法使用useState方法时要提前引入React依赖包

const [state, setState] = React.useState(initalState);

参数

  1. state -> 获取方法,返回的状态 (state) 与默认值 (initalState) 全等
  2. setState -> 设置方法,setState 函数用于更新 state。它接收一个新的 state 值并将组件的一次重新渲染加入队列。setState 是一个函数(setState()),函数中可以传入具体的值,也可以添加一个回调
    • setState(newState);

      setState(() => { return newState; }); 

  3. initalState -> 默认值

  注意

    React 会确保 setState 函数的标识是稳定的,并且不会在组件重新渲染时发生变化。这就是为什么可以安全地从 useEffect 或 useCallback 的依赖列表中省略 setState

    • import React from "react";
      
      const App = () => {
        const [state, setState] = React.useState("hello world");
      
        console.log(state); // hello world
        React.useEffect(() => {
          setState("hello hook");
        }, []);
      
        console.log(state); // hello hook
      
        return <div></div>;
      };

      useEffect 和 useCallback 都可以接收两个参数,分别是方法回调和依赖项数组,依赖项的作用是当发生改变时,方法的回调会执行,所以因为 setState 的函数表示稳定不会发生变化,所以值不会发生变化,依赖没有意义

      在 CodeSendBox 上尝试

 惰性初始 state

   initialState 参数只会在组件的初始渲染中起作用,后续渲染时会被忽略。如果初始 state 需要通过复杂计算获得,则可以传入一个函数,在函数中计算并返回初始的 state,此函数只在初始渲染时被调用

    • import React from "react";
      
      const App = () => {
        const [state] = React.useState(() => {
          const num = 1 + 1;
          return num;
        });
      
        console.log(state); // 2
      
        return <div></div>;
      };

       此时useState中的回调函数使用来为state设置默认值,所以一定要用return语句将结果返回出去,否则state值仍为undefined,回调函数无意义

         在 CodeSendBox 上尝试

 

posted @ 2021-07-24 23:38  调用Function  阅读(341)  评论(0编辑  收藏  举报