Javascript 用axios json响应reactjs填充钩子

Javascript 用axios json响应reactjs填充钩子,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我很难思考如何用API响应(json)填充钩子 参见下面的代码 cosnt [loginResponse, setloginResponse] = useState({ Token: '', UserID: '', //from user-id UserName: '', //from user-userName firstName: '', //from user-firstName rcCode: '' //from attributes-rcCode

我很难思考如何用API响应(json)填充钩子

参见下面的代码

cosnt [loginResponse, setloginResponse] = useState({
    Token: '',
    UserID: '', //from user-id
    UserName: '', //from user-userName
    firstName: '', //from user-firstName
    rcCode: '' //from attributes-rcCode 
})

const login = async () => {
    await axios.get('/API')
        .then(response => {
            console.log('response.data', response.data.resp)
        });
}
下面是
console.log
response.data.resp
)的结果

对于
console.log
response.data
):

我想用这些数据填充我的钩子,以便在我的页面上使用它们

如果我尝试
console.log
response.data.resp.data
),我得到了
undefined

console.log(response)
上,我得到:

谢谢。

在。然后

setLoginResponse({...loginResponse, Token: response.data.resp.data.token, UserId: response.data.resp.data.user.id, ...}
您可以首先分解响应对象的结构,并将值存储在变量中,以使setLoginResponse更易于阅读

在中。然后

setLoginResponse({...loginResponse, Token: response.data.resp.data.token, UserId: response.data.resp.data.user.id, ...}
您可以首先分解响应对象的结构,并将值存储在变量中,以使setLoginResponse更易于阅读


不要同时使用
async/wait
.then()
。使用这两种方法中的任何一种

const login = async () => {
    const response = await axios.get('/API');
    const parsedData = JSON.parse(response.data.resp);
    const userData = parsedData.data;

    setLoginResponse({
        Token: userData.token,
        UserID: userData.user.id,
        UserName: userData.user.userName,
        firstName: userData.user.firstName,
        rcCode: userData.user.attributes.rcCode
    });
}

不要同时使用
async/wait
.then()
。使用这两种方法中的任何一种

const login = async () => {
    const response = await axios.get('/API');
    const parsedData = JSON.parse(response.data.resp);
    const userData = parsedData.data;

    setLoginResponse({
        Token: userData.token,
        UserID: userData.user.id,
        UserName: userData.user.userName,
        firstName: userData.user.firstName,
        rcCode: userData.user.attributes.rcCode
    });
}


嗨@alaric,在console.log上,我无法访问response.data.resp.data。对于response.data.resp.data.token,我收到错误
未处理的拒绝(TypeError):无法读取未定义的
@Rymrk的属性“token”,您正在尝试在中访问此值。然后,对吗?我在上面声明了console.log的返回。检查上面的Rajiv Punjabi响应,我没有注意到async/Wait抱歉,在您的情况下,您不能将两者混合使用,根据您的喜好使用promise或async Wait Hi@alaric,我收到了相同的错误Hi@alaric,在console.log上,我无法访问response.data.resp.data。对于response.data.resp.data.token,我收到错误
未处理的拒绝(TypeError):无法读取未定义的
@Rymrk的属性“token”,您正在尝试在中访问此值。然后,对吗?我在上面声明了console.log的返回。检查上面的Rajiv Punjabi响应,我没有注意到async/Wait抱歉,在您的情况下,您不能将两者混合使用,使用promise或async Wait,如您所愿Hi@alaric,我在发布代码时遇到了相同的错误,请先验证。Hi@zhulien,您是指格式吗?很抱歉,我下次会将其格式化。不,您的响应json和请求的函数都无效。嗨@zhulien,您能帮我回答我的问题吗?当您发布代码时,请先验证它。嗨@zhulien,您是指格式吗?很抱歉,我下次会把它格式化。不,你的json回复和请求的函数都无效。你好@zhulien,你能帮我回答我的问题吗?你好先生,我试过把console.log放在setLoginresponse之前,但我得到了
未定义的
你好@rajiv punjabi,我得到了这个错误
未经处理的拒绝(TypeError):无法读取未定义的属性“token”
。我还尝试了console.log用户数据,但是我得到了
未定义的
您确定从后端服务得到了正确的响应吗?基于您的演示数据,它工作正常。你好@rajiv punjabi,我用
console.log(response)
的屏幕截图更新了我的问题。感谢您的EMOVE const userData line并将其替换为此
const parsedData=JSON.parse(yourResponse.resp.data);const userData=parsedData.data
Hi Sir我尝试在setLoginresponse之前放置console.log,但我得到了
undefined
Hi@rajiv punjabi,我得到了这个错误
未处理的拒绝(TypeError):无法读取未定义的属性“token”
。我还尝试了console.log用户数据,但是我得到了
未定义的
您确定从后端服务得到了正确的响应吗?基于您的演示数据,它工作正常。你好@rajiv punjabi,我用
console.log(response)
的屏幕截图更新了我的问题。感谢您的EMOVE const userData line并将其替换为此
const parsedData=JSON.parse(yourResponse.resp.data);const userData=parsedData.data