React Navigation参数不会重置

时间:2018-09-05 20:03:50

标签: javascript reactjs react-native react-navigation

我无法在React Native中将导航参数重置为null。

MainTab
 -主页(堆栈)
 -杂项(堆栈)
 -技巧(堆栈)

在“主页”选项卡上,我有一个转到“其他”的按钮,但是我想转到“其他”路线上的“提示”选项卡。
路由应类似于-(主页->提示->其他)
该按钮返回以下带有参数的参数-

-np 4 "$(TargetPath)"

这些参数传递后,我将根据从“主页”选项卡上的按钮传递的backRoute和routeImGoingNext参数在“提示”屏幕的导航中呈现一个后退按钮和一个跳过按钮。

this.props.navigation.navigate('Tips', {backRoute: 'Home', routeImGoingNext: 'Misc'});

单击“主页”选项卡上的按钮后,单击“提示”选项卡,就会出现我的问题。这些参数仍处于设置状态,因此呈现了后退按钮和跳过按钮,但是如果我单击“提示”选项卡,则不应有这些按钮。

关于手动单击选项卡时如何重设参数的任何想法?

5 个答案:

答案 0 :(得分:6)

将其用于react navigation

中的清晰参数
this.props.navigation.setParams({YOUR_PARAMS: null});

答案 1 :(得分:1)

我能够通过手动创建函数并将传递的参数设置为null来清除参数。按下标题按钮时,将调用clearParams函数。

org.openqa.selenium.WebDriverException: connection refused 

            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
            at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
            at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:122)
            at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
            at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
            at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
            at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
            at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
            at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
            at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
            at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
            at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
            at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:125)
            at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
            at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
            at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
            at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
            at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:212)
            at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:130)
            at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:140)
            …

答案 2 :(得分:1)

我也遇到了这个问题,我在文档中发现参数是浅合并的,所以如果你有一些来自以前导航的婴儿车,然后你用不同的参数导航到同一个屏幕,那么它们将被合并。 这是文档的链接 https://reactnavigation.org/docs/params 快速示例将是:

navigation.navigate('Receipt', {id: '001', eventId: 'eventIdMock');

从另一个屏幕,如果我用这个参数导航到收据:

navigation.navigate('Receipt', {id: '002'});

那么导航仍然会有eventId: 'eventIdMock' 所以解决方案是将此值显式设置为 nullundefined

navigation.navigate('Receipt', {id: '002', eventId: null});

enter image description here

答案 3 :(得分:0)

您尝试查看此帖子,将解决您的想法

https://reactnavigation.org/docs/en/stack-actions.html

答案 4 :(得分:0)

这对我有用,直接来自文档:

    props.navigation.reset({
        index: 0,
        routes: [{name: "Screen you need to go back to"}]
    });