javascript - 为什么 React Hooks 不更新数据

标签 javascript reactjs async-await react-hooks

我尝试使用获取的数据更新 useState 中的值。 当我控制台.log data.success时,它返回正确。然后我将其分配给成功值。但它返回false!为什么?为什么值(value)成功没有立即更新。最后我从服务器收到登录成功的消息。 登录成功: false 用户管理员已登录

const Signin = () => {
  const [values, setValues] = useState({
    success: false
  });

  const { success } = values;

  const clickSubmit = async event => {
    event.preventDefault();

    const signReact = catchAsync(async (email, password) => {
      const data = await signin(email, password) // fetch data from the server
      console.log(data.success); // -> true
      if (data) {
        setValues({
          ...values, success: data.success // -> assign to success
        });
        console.log("SIGN IN success: " + success); // -> false! why?!
      }
      return data;
    });

    signReact(email, password);
  };

最佳答案

使用useEffect 。尝试这样的事情:

useEffect(() => {
    console.log("SIGN IN success: " + values.success);
  }, [values]);

...
...
 const data = await signin(email, password);
 setValues(prevState =>{...prevState, success: data.success});

关于javascript - 为什么 React Hooks 不更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60686533/

相关文章:

reactjs - 通过嵌套组件从下到上传递事件

reactjs - Material 用户界面 : How can I remove spacing on Grid item in small breakpoint?

javascript - 使用 Javascript Fetch API 对异步获取的数据进行排序

javascript - 获取请求和状态更改后如何重新渲染组件?

javascript - JS : prototypal inheritance child method gives me the function body

javascript - 在react js和redux中过滤时如何返回所有商店

c# - 为什么在不安全的部分禁止等待?

javascript - 如何使用粗箭头表示法编写异步函数模块函数

javascript - Meteor 模板不更新更改的数据

javascript - 用户注册 React Redux 后应该做什么?