Как обновить состояние, используя ax ios в React? - PullRequest
0 голосов
/ 01 мая 2020

Как я могу запустить свой useEffect с наивысшим приоритетом, чтобы сначала можно было обновить мое состояние, а затем выполнить дальнейшую обработку

Я хочу, чтобы мой топор ios часть сначала запускалась внутри useEffect, чтобы мое состояние могло сначала обновите, а затем я могу использовать это.

Вот ошибка: TypeError: Cannot read property 'id' of undefined Когда я утешаю, он показывает, что состояния не обновлены, он содержит пустой массив

Вот мой код:

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

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

    useEffect(() => {
        dispatch({
        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"
                });
            });
    }, );

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

    return (
        <div>

        </div>
    );
};

export default Staff;


1 Ответ

1 голос
/ 01 мая 2020

Ошибка в том, что вы пытаетесь получить доступ к свойству 'id' для объекта undefined.

Изменить useEffect

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

Чтобы избавиться от ошибки, просто измените initialState .

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

Надеюсь, это поможет.

...