reactjs - ReactJs useState 首次设置空白文本
问题描述
我正在尝试更新我的状态值,然后将其用于 axios 将用户详细信息发送到我的 api,但是第一次用户单击注册表单提交按钮发送他的信息时,useState 似乎不起作用,第二次我的状态有值,这是我的代码:
import React, { createContext , useState, useEffect } from 'react';
export const RegContext = createContext();
const RegContextProvider = (props) => {
const [UserDetail, setUserDetail] = useState({});
const addUser = (first_name, last_name, phone_number) => {
setUserDetail(UserDetail => ({...UserDetail, first_name, last_name, phone_number}));
console.log(UserDetail);
//after set state i need to send details to axios
//axios.post('https://api.espadev.ir/api/v1/auth/auth/register' , {UserDetail})
//first time server returns 400 error because state is empty and i should click again on my button to change state.
}
return (
<RegContext.Provider value={{UserDetail, addUser}}>
{ props.children }
</RegContext.Provider>
);
}
export default RegContextProvider;
你能帮我解决这个问题吗?
解决方案
要解决您的问题,您应该将所有数据传递到addUser
例如
const addUser = (newUserDetail ) => {
setUserDetail(newUserDetail ));
console.log(newUserDetail );
}
您只能在 useEffect 中看到新状态或将新数据与UserDetail
const addUser = (first_name, last_name, phone_number) => {
const newUserDetails = {...UserDetail, first_name, last_name, phone_number};
但是在这种情况下,如果您调用addUser
更多,则可以使用旧的 UserDetail,然后反应可以更新您的组件
推荐阅读
- sql-server - 如何从 SSRS 中的多行连接文本?
- flutter - 即使屏幕锁定或应用程序关闭,如何保持 Flutter 应用程序处于活动状态?
- database-design - 如何对表的字符串类型字段设置条件过滤器?
- node.js - 无法使用 GraphQl api 在 MongoDb 中插入数据
- product - SQLSTATE [42S02]:未找到基表或视图:1146 表“ecomteck_productattachment”不存在
- java - 使用java从文本文件中删除重复行
- linux - Grep Results in new line after a match
- spring-boot - Pass userID in @PrePersist (@PreUpdate) method using Spring Boot and JWT
- ios - Connection lost when debug iOS app on iPhone
- sql - 如何根据传递的两个参数过滤获取结果?