2

アプリに簡単なログイン画面を追加していますが、ユーザーが認証されると Actions.home を呼び出すことができません。

押されたときに関数を呼び出してサーバーに接続し、認証ステータスを取得するボタンがあり、成功すると Actions.home を呼び出します。しかし、何も起こりません。エラーや警告はありません。ただ何もない。

Actions.home、Actions.home()、{Actions.home}、コンストラクターで Actions.home を状態として保存し、状態を使用して、すべての形式を試しました...何も機能しませんでした。

しかし、私の他の画面では、 onPress props の Actions.somewhere を呼び出すと動作します。

私はここでほとんどの問題を読み、StackOverflow に関する質問 (多くはありませんでした) を読みましたが、何が問題なのか理解できませんでした。どこでも提案されているすべてのソリューションを使用しましたが、何もしませんでした。

console.log(Actions.home) を実行すると、次のように表示されます: ここに画像の説明を入力してください

ここに私のスクリプトがあります:

router.js

<Scene key="root">
        <Scene key="login" title="login"  component={Login} hideTabBar hideNavBar initial />
        <Scene key="tabsRoot" tabs tabBarStyle={[styles.tabBar, styles.tabBarShadow]} >
            <Scene key="tab_home" iconName="home" icon={TabBarItem} >
                <Scene key="home" title="saba" component={Home} navBar={NavBar} />
                <Scene key="campaignHome" title="campaign" hideTabBar component={Campaign} navBar={NavBar} direction="vertical" />
            </Scene>
            ......
        </Scene>
</Scene>

ログイン画面:

export
default class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: '',
      phone: '',
      shouldLogin: false,
      shouldRegister: false,
      error: false,
    };
    this._checkAuth = this._checkAuth.bind(this);
    this._onNumberChanged = this._onNumberChanged.bind(this);
    this._isRegistered = this._isRegistered.bind(this);
    this._isNotRegistered = this._isNotRegistered.bind(this);
  }

  async _isRegistered(response) {
    var user = response.payload.user;
    this.state = {
      name: user.name,
      phone: user.phone,
      shouldLogin: true,
    };

    Actions.home;
  }

  _isNotRegistered(response) {
    var error = response.error;
    if (!error.code === NOT_REGISTERED_CODE) {
      this.setState({
        shouldLogin: false,
        shouldRegister: false,
        error: true,
      })
      throw new AuthException("server responded with unrecognised object");
    }

    this.setState({
      shouldLogin: false,
      shouldRegister: true,
      error: false,
    })
  }

  _checkAuth() {

    var {
      phone
    } = this.state;

    var data = {
      phone: phone,
    }

    let url = buildQuery(AuthTypes.LOGIN, data);

    console.log("usl: " + url);

    //connect to server
    ....
    if(response.success) {
      this._isRegistered(response);
    } else {
      this._isNotRegistered(response);
    }
  }

  _onNumberChanged(event) {
    var phone = event.nativeEvent.text;
    this.setState({
      phone: phone,
    });
  }

  render() {
      return ( < View style = {
            [styles.container]
          } >
          < View style = {
            [styles.imgContainer]
          } >
          < Image source = {
            require('./../Images/login.png')
          }
          width = "200"
          height = "200" / >
          < /View>
                <View style={[styles.form]}>
                    <View style={[styles.inputContainer]}>
                        <TextInput style={[styles.input]} placeholder="enter your phone number" onChange={ this._onNumberChanged } maxLength={12} / >
          < /View>
                    <TouchableWithoutFeedback onPress={ this._checkAuth } >
                        <View style={[styles.submitContainer]}>
                            <View>
                                <Text style={[styles.text, styles.loginButton]}>login</Text >
          < /View>
                        </View >
          < /TouchableWithoutFeedback>
                </View >
          < /View>
        )
    }
}

4

2 に答える 2

4

問題は、ログインから別のシーン内にネストされているシーンに移動しようとしていることにあると思います。ログインのコンテキストからActions.tabsRoot、隣接するシーンであるため、使用できるようになります。

react-native-router-fluxこれをテストするために作成した簡単な例を次に示します。

<Router>
   <Scene key='pageOne' component={PageOne} initial={true}/>
   <Scene key='home'>
     <Scene key='pageTwo' component={PageTwo}/>
     <Scene key='pageThree' component={PageThree}/>
   </Scene>
</Router>

pageOneから呼び出すことができActions.home、そのスタックの最初のシーン、またはinitialオンになっているスタックのシーンに遷移します。しかし、pageOneActions.pageTwoから呼び出してみると、うまくいきません。

お役に立てれば。:)

于 2016-08-24T20:35:05.543 に答える
0

Actions.tabsRoot を呼び出して、ホーム シーンを初期化する必要があります。

<Scene key="home" title="saba" component={Home} navBar={NavBar} initial/>
于 2016-08-24T23:02:37.787 に答える