如何在React中使用axios更新状态?

提瓦里(Parth Tiwari):

如何以最高优先级运行useEffect,以便可以首先更新我的状态,然后可以进行进一步处理

我希望我的axios部分应该首先在useEffect内部运行,以便可以首先更新我的状态,然后再使用它。

这是错误:TypeError: Cannot read property 'id' of undefined当我控制台显示状态未更新时,它持有空数组

这是我的代码:

import React, {useEffect, useReducer } from 'react';
import { Tab, Nav } from 'react-bootstrap';
import axios from "axios";


const initialState = {
    staff: [],
    isFetching: false,
    hasError: false
}

const reducer = (state, action) => {
    switch (action.type) {
        case "FETCHREQUEST":
            return {
                ...state,
                isFetching: true,
                hasError: false
            };
        case "FETCHSUCCESS":
            return {
                ...state,
                staff: action.payload,
            };
        case "FETCHFAILURE":
            return {
                hasError: true,
                isFetching: false
            };
        default:
            return state;
    }
}

const FetchingStaff = ({ setStaffid }) => {
    const [states, dispatch] = useReducer(reducer, initialState)
    console.log(states)

    useEffect(() => {
        dispatch({
            type: "FETCHREQUEST"
        });
        axios.get("https://example.com/staff")
            .then(response => {
                console.log(response)
                console.log(response.data)
                dispatch({
                    type: "FETCHSUCCESS",
                    payload: response.data.access
                });
            })
            .catch(error => {
                console.log(error);
                dispatch({
                    type: "FETCHFAILURE"
                });
            });
    }, );
    // For initial value
    useEffect(() => {
        const id = states.staff[0].id;
        setStaffid(id);
    }, []);

    return (
        <div>
            <Tab.Container
                defaultActiveKey={states.staff[0].id}
                onSelect={id => setStaffid(id)}
            >
                <Nav variant="pills" className="flex-column">
                    {states.staff.map(staff => (
                        <Nav.Item key={staff.id}>
                            <Nav.Link eventKey={staff.id}>{staff.name}</Nav.Link>
                        </Nav.Item>
                    ))}
                </Nav>
            </Tab.Container>
        </div>
    );
};

export default FetchingStaff;


桑迪:

错误是因为您试图访问undefined对象的属性“ id”

更改 useEffect

useEffect(() => {
  const staff = states.staff[0];
  if(staff) setStaffid(staff.id);
}, [states.staff]);

要摆脱错误,只需更改您的initialState。

const initialState = {
    staff: [{}],
    isFetching: false,
    hasError: false
}

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在反应中使用更新的状态

如何在 React 中使用 Axios 发帖?

如何在React中的axios中发送更新的状态?

如何在querySelector中使用React状态

如何使用 axios.get 方法更新 react 中的状态?

如何在React / TypeScript中使用钩子进行部分状态更新

如何在componentWillMount中更新状态并在React Native的render函数中使用该值?

如何在React + Redux中使状态更新异步

当状态在axios调用中更新时,如何在单元测试(React JS)中声明状态?

如何在 Javascript 中使用 Promises 进行状态更新?

如何在 ReactJS 中使用状态更新数组

如何在Axios中使用React设置多部分?

如何在react-axios中使用动态变量?

如何在React中使用redux取消以前的axios

如何在 React JS 中使用 Redux 和 Axios?

如何在React项目中使用状态

如何在React Native中使用.reduce()修改内部状态?

如何在 React 中使内联样式使用状态?

如何在React函数组件中使用数组状态?

如何在 React-native 中使用 Picker 设置状态?

如何在 React 中使用钩子重置本地状态

如何在React中使用钩子从父组件获取其值的父组件中更新正确的状态值?

尽管状态已更新,但在React中使用axios发布请求后,DOM没有更新

在 React 中使用变量更新状态

如何使用React Router的route参数发出axios请求,然后根据响应更新状态?

在 React Context 中,如何在状态函数中使用状态变量?

如何在React中使用setState更新数组元素?

如何在 React -TypeScript 中使用 useState 更新、扩展数组?

如何在React中更新父状态