如何调用Actions.pop()并刷新上一个场景? React Native,Redux,React-Native-Router-Flux

时间:2018-11-10 06:35:46

标签: react-native react-redux react-native-router-flux

我要在用户创建记录后将其重定向到上一个屏幕,而且还刷新上一个列表屏幕以反映新记录

这是我的操作文件中的功能

fetch(CREATE_POST, request).then(response => {
        dispatch({ type: action });
        Actions.pop();
        setTimeout(() => { Actions.refresh({}) }, 10);
    }).catch(error => {
        console.log(error);
    });

但是,当调用Actions.pop()时,它将带我到上一个屏幕,但不会刷新它。

我尝试使用Actions.pop({type:reset})但没有运气

任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:1)

您是否尝试过Actions.pop({ refresh: {} }) 或者,如果您想更具体地了解哪些道具应该刷新,则可以实际指定Actions.pop({ refresh: { user: res.user } })

答案 1 :(得分:0)

最好的方法是将场景包装到堆栈中,而使用reset。该堆栈可以是嵌套堆栈,这不是问题,重置将在最后一个堆栈上起作用,并且对父堆栈没有影响。

<Stack key="root">

... scenes

   <Stack key="group1">
      <Scene key="list" initial>
      <Scene key="add_update">//after submit: Actions.reset("list");
   </Stack>

</Stack>

祝你好运。

答案 2 :(得分:0)

我不知道为什么我们必须使用它,但是我在github问题中看到了这个问题,我找不到它来提及,接受我的道歉。 首先,您必须包装场景,如在React Router Flux灯箱参考中所见:

https://github.com/aksonov/react-native-router-flux/blob/master/docs/API.md#lightbox-lightbox

然后我发现这可行。

Actions.pop();
        setTimeout(() => {
            Actions.refresh({
               p :Math.random()
            });
        }, 0);

答案 3 :(得分:0)

仅在函数中,当您获取数据或执行任何操作并且想要返回到屏幕时,在代码末尾添加此代码,因此可以在onPress事件中放置它:

Actions.refresh({key:Math.random()})

 onPress={()=>{
    do something....
    Actions.refresh({key:Math.random()})
    }}

仅此而已。

参考您的代码:

fetch(CREATE_POST, request).then(response => {
        dispatch({ type: action });
        Actions.pop();
        setTimeout(() => { Actions.refresh({key:Math.random()}) },10);
    }).catch(error => {
        console.log(error);
    });

答案 4 :(得分:0)

您可以使用 onEnter 方法。每当您登陆特定页面时,它将被调用。 因此可以刷新或重置。

选项1

 static onEnter() {
    Actions.pageName({ type: ActionConst.RESET });
  }

选项2

 static onEnter() {
       Actions.pagename({ type: ActionConst.REFRESH, key: Math.random() });
   }