React Redux — отправка действия с реагирующими хуками

Чтобы уточнить, я довольно новичок в концепции реакции-редукции. Я пытаюсь отправить асинхронное действие в презентационном комп. но это, кажется, не работает.

Компонент контейнера

const store = configureStore();

const Root: React.FC = () => (
    <Provider store = {store}>
        <App />
    </Provider>
);

render(<Root/>, document.getElementById('root'));

Презентационный компонент

interface AppProps {
    system: SystemState,
    updateSession: typeof updateSession,
    getLanguageThunk: any
}

const App: React.FC<AppProps> = ({system, updateSession, getLanguageThunk}) => {
    useEffect(() => {
        getLanguageThunk().then((res: any) => {
            console.info(res);
            i18n.init().then(
                () => i18n.changeLanguage(res.language));
       });
    }, []
);

    return (
            <div>
                <div className = "app">
                    <TabBar/>
                </div>
            </div>
    );
};

const mapStateToProps = (state: AppState) => ({
    system: state.system
});

export default connect(mapStateToProps, { updateSession, getLanguageThunk })(App);

Но консоль каждый раз пишет undefined. Так что я делаю что-то не так здесь. Может быть, кто-то из вас может помочь мне здесь.

Промежуточное ПО Redux

export const getLanguageThunk = (): ThunkAction<void, AppState, null, Action<string>> => async dispatch => {
    const language = await getLanguage();
    dispatch(
        updateSession({
            disableSwipe: false,
            language
        })
    )
};

async function getLanguage() {
    try {
        const response = await fetch('http://localhost:3000/language');
        return response.json();
    } catch {
        return { language: 'en_GB' }
    }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
1 016
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

export const getLanguageThunk = (): ThunkAction<void, AppState, null, Action<string>> => async dispatch => {
    const language = await getLanguage();
    dispatch(
        updateSession({
            disableSwipe: false,
            language
        })
    )
    return language;
};

Другие вопросы по теме