在app load和bind navigator

时间:2017-01-03 10:38:17

标签: reactjs react-native

我不能因为上帝的爱找到任何东西,或者我只是不知道究竟要搜索什么。我是React和React Native的新手,我需要RN项目的帮助。我尝试做的是在我的组件auto_login()中调用函数MainLogic。该函数如下所示,并放在module.exports

auto_login: function(navigator){
    if(GLOBALS.LOGGED_IN != true){
      Keychain
      .getGenericPassword()
      .then(function(credentials){
        fetch(GLOBALS.API_URL, {
          method: "POST",
          headers: {
            'Accept': 'application/x-www-form-urlencoded',
            'Content-Type': 'application/x-www-form-urlencoded',
          },
          body: "username=" + credentials.username + "&password=" + credentials.password,
        })
        .then((response) => response.json())
        .then((response) => {
          if(JSON.stringify(response.status).replace(new RegExp('"', 'g'), '').match("OK")){
            GLOBALS.LOGGED_IN = true;
            GLOBALS.USERNAME = credentials.username;
            GLOBALS.PASSWORD = credentials.password;

            navigator.push({
              id: 'news'
            });
          }
        })
        .catch((e) => {
          console.warn(e);
        })
        .done();
      });
    }
  },

现在我从

调用此功能
componentDidMount: function(){
  MainLogic.auto_login(navigator);
},

render函数之前,但我意识到导航器已脱离上下文或其他东西。我想帮助理解我如何调用此功能并正确绑定navigator。我现在正在收到警告:

TypeError: navigator.push is not a function. (in 'navigator.push({id:'news'})', 'navigator.push' is undefined.

非常感谢任何理解这一点的帮助!

编辑:我使用的是React.createClass。

1 个答案:

答案 0 :(得分:1)

由于您尝试在 main_logic.js 文件中替换导航器, auto_login中 关键字 没有指出你的功能的背景。绑定也没有帮助,因为 关键字仍然指向相同的上下文。

我能想到的最好方法是将上下文 关键字传递给main_logic.js,然后再调用

this.refs['nav']

我们会将其更改为

paramName.refs['nav']

我怀疑可能有更好的解决方案,因此我鼓励您深入了解并在React Native和JS中进行迭代。