用Navigator中的passProps传值为什么不能用变量?



  • <Navigator
    initialRoute={{
    component:login,
    passProps:{
    ID: this.state.clientId,
    Version: this.state.version,
    Status: this.state.status,
    }
    }}
    renderScene={(route,navigator)=>{
    let Component = route.component;
    return <Component {...route.passProps} navigator={navigator}/>;
    }}
    />

    我这样写传到login页面中调用Version值是不显示的,但是我把this.state.version改成 ‘测试’ 就可以显示了,这是为什么?我肯定不可能把Version值写死的!不知道怎么才能传变量过去下个页面!有人知道吗?


  • administrators

    你写封信托人捎走,然后人走到半路你说等等,你回来一下,我还要修改内容

    要么你这封信永远寄不出去,要么寄出去了,那就是白纸黑字,不能它边在信封里面躺着,边随着你脑子里的想法变。

    如果你需要动态的变,那你就需要建立双向传递和监听的机制(全局事件、redux、mobx),而不是initialRoute这种单向传递的方法。不要问我该怎么做。



  • @晴明

    可能是我没描述清楚,错了,我的意思不是要动态的变,我应该把this.state.version这个变量换成是全局变量,另外定义一个全局的version,可以写成:
    passProps:{
    ID: clientId,
    Version: version,
    Status: status,
    }
    这样,我的意思是只要ID这些参数的值是个变量就传递不到下一个页面,只能是写死比如:ID:‘测试’ 这样写才行,不知道为什么!难道ID这样的参数值必须要写死吗?我要传一个变量怎么办呢?


  • administrators

    变量当然可以传,你提到全局变量,很大的可能是你使用在前,声明在后,导致你产生不能传变量的错觉——怎么可能会有这种想法呢???



  • @晴明
    比如我在这个页面要获取APP存储的一些用户数据,或者是我用推送功能获取到的数据,再传给第二个页面去使用,我获取的同时赋值给了这个变量通过Navigator传值给第二个页面,我确定我是在定义当前页组件之前声明的全局变量,然后在组件内部的方法中去改变这个全局变量的值,再传给Navigator!


  • administrators

    @ocman
    比如这赋值过程中有没有异步?谁在前谁在后?
    不要从你的角度去思考代码,踏踏实实的去debug,代码怎么跑的,未必如你所想



  • @晴明
    我干脆截图好了

    0_1494827958021_01.jpg
    0_1494828029160_02.jpg

    两张图的连接处有两行代码是截重复了,毛病在哪呢?


  • administrators

    正如我所说啊,这中间存在异步过程啊

    执行的实际顺序是
    1、初始空值
    2、render,带走空值
    3、异步回调,改写值



  • @晴明
    那我应该用什么方式才能把值传过去呀?


  • administrators

    回头看一楼回复,字数补丁



  • @晴明 说:

    建立双向传递和监听的机制

    具体是怎么写呀?不会



  • @ocman 建议学习mobx,或者自己写回调。这是异步的必修。


登录后回复