【问题标题】:navigation.getparam latest value is not accessible inside didFocus listener在 didFocus 侦听器中无法访问 navigation.getparam 最新值
【发布时间】:2021-03-12 06:02:46
【问题描述】:

我在反应原生应用中有 2 个屏幕,两个屏幕都是功能组件。 屏幕 1 上的一个按钮通向屏幕 2,我在屏幕 2 上选择了几个复选框,然后单击一个按钮导航到屏幕 1,并添加导航参数。

回到屏幕 1 运行 didFocus 侦听器,但参数值未定义,当我在代码编辑器中按 ctrl+s 时,useEffect 运行并且值变得可访问。

此后,从屏幕 2 返回屏幕 1 会运行 didfocus 侦听器(如预期的那样),但参数值不会更新。

下面是屏幕 1 中的 useEffect 代码。

 useEffect(() => {
        navigation.getParam('from') == 'TagFiltersScreen' ? getAllQuestions('mostInsightful', navigation.getParam('tagsFilter')) : getAllQuestions();

        const listener = navigation.addListener('didFocus', () => {

            navigation.getParam('from') == 'TagFiltersScreen' ? getAllQuestions('mostInsightful', navigation.getParam('tagsFilter')) : getAllQuestions();

        });
        return () => {
            listener.remove();
        }

    }, []);

【问题讨论】:

标签: react-native react-navigation use-effect


【解决方案1】:

我遇到了同样的问题,这就是我的做法。

useEffect(() => {
    const isFocused = props.navigation.isFocused();
    if (isFocused) {
        const { params } = props.navigation.state;
        navigationFocus(params);
    }
    const navigationFocusListener = props.navigation.addListener('willFocus', (payload) => {
        const params = payload.state.params;
        navigationFocus(params);
    });
    return () => {
        navigationFocusListener.remove();
    };
}, []);
const navigationFocus = (params) => {
    if (params) {
        
    }
}

我很想知道是否有更好的方法来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2013-05-07
    相关资源
    最近更新 更多