Реагировать на собственный Redux useSelector не определен после навигации - PullRequest
0 голосов
/ 04 марта 2020

Я не могу получить обновленное состояние после перехода в другое состояние. Я хочу использовать свой dataState, который инициализируется в редукторе и обновляется через действие. Я использовал это состояние после отправки на Экран 1, но при переходе на другой экран его возвращение не определено.

store. js

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';

import reducers from './reducers.js';


export default createStore(reducers, applyMiddleware(thunk));

action. js

export const DATA_AVAILABLE = 'DATA_AVAILABLE';

export const addData = (data) => ({
    type: DATA_AVAILABLE,
    data
});

редукторы. js

import { combineReducers } from 'redux';

import { DATA_AVAILABLE } from "./actions" 

let dataState = { data: [] };

const dataReducer = (state = dataState, action) => {
    switch (action.type) {
        case DATA_AVAILABLE:
            return {...state, data: action.data};
        default:
            return state;
    }
};


const rootReducer = combineReducers({
    dataReducer
})

export default rootReducer;

HomeScreen. js Использование

const dataReducer = useSelector(state => state.dataReducer);
const { data } = dataReducer;

useEffect(() => getData(), []);

const getData = () => {
    setIsFetching(true);
    let url =
      "https://my-json-server.typicode.com/mesandigital/demo/instructions";
    axios
      .get(url)
      .then(res => res.data)
      .then(data => dispatch(addData(data)))
      .catch(error => alert(error.message))
      .finally(() => setIsFetching(false));
  };

Доступ к выбранным данным можно получить с константой данных. Таким образом, это означает, что состояние dataState обновляется после выборки. Но когда я перехожу на другой экран и пытаюсь получить доступ к dataState, он возвращает undefined. Я получаю доступ к состоянию хранилища на этом экране:

const dataReducer = useSelector(state => state.dataReducer);
const { data } = dataReducer;

константа данных возвращает неопределенное значение. Я что-то упустил?

1 Ответ

0 голосов
/ 04 марта 2020

Хорошо, я нашел проблему в своем коде. Я устанавливал постоянное значение сразу после useSelector. Я напрямую вызываю константу useSelector, и она работает. Проблема в том, что другая константа не была установлена, когда я ее вызываю. Все равно спасибо

...