redux 状态变化时如何导航?

Posted

技术标签:

【中文标题】redux 状态变化时如何导航?【英文标题】:How to navigate when redux state changes? 【发布时间】:2019-12-10 20:41:03 【问题描述】:

当我的异步 redux 操作完成并且状态发生变化时,如何重定向到不同的屏幕?

我目前在我的应用程序中使用 redux 和 react 导航,并且我有以下代码可以调度一个动作、获取我的令牌并将它们存储到 redux 状态。当操作成功时(即 this.props.isReady 的状态变为 true),我想导航到 StackNavigator 中的新屏幕。但是我该怎么做呢?

import * as React from "react";
import  connect  from "react-redux";
import  fetchToken  from "./actions";
import  ActivityIndicator, View, Text  from "react-native";
import  Token  from "../../utils/interfaces";
import Styles from "../../theme/Styles";

export interface Props 
    navigation: any;
    token: Token;
    isReady: boolean;
    fetchToken(grantType: string, id: number, secret: string): object;


function bindAction(dispatch) 
    return 
        fetchToken: (grantType: string, id: number, secret: string) => dispatch(fetchToken(grantType, id, secret)),
    ;


const mapStateToProps = (state: any) => (
    token: state.setupReducer.token,
    isReady: state.setupReducer.isReady,
    error: state.setupReducer.error,
);

class SetupContainer extends React.Component<Props> 

    state = 
        message: "Etablerarar uppkoppling",
    ;

    componentDidMount() 
        this.props.fetchToken("client_credentials", XXXXXXXXX, "YYYYYYYYYYYYYYY");
    
    render() 
        if (this.props.isReady) 
            return (
                <View>
                    <ActivityIndicator size="large" color="#FF6600" />
                    <Text style=Styles.p>this.state.message</Text>
                </View>
            );
        

        return (
            <View style=[Styles.marginY, Styles.p]>
                <Text style=Styles.p>All done!</Text>
            </View>
        );
    

导出默认连接(mapStateToProps, bindAction)(SetupContainer);

【问题讨论】:

【参考方案1】:

你可以在 componentDidUpdate 中观察 props 的变化

 componentDidUpdate(prevProps) 
     if (!prevProps.isReady && this.props.isReady) 
       // navigate
     
 

【讨论】:

以上是关于redux 状态变化时如何导航?的主要内容,如果未能解决你的问题,请参考以下文章

如何响应 redux 中的状态变化并派发另一个动作?

react-router-redux 5:维护导航中的商店状态历史记录

如何在 React/Redux 中本地管理组件的状态

当redux store中的值发生变化时,如何更新formik中的特定表单字段?

如何更新 LocalStorage 中持久化的 Redux 状态结构

如何使用 redux 模式在 react native 中刷新组件?