2017-08-12 5 views
-3
this.state={ 
    value: 'v1', 
    newValue: '', 
} 

componentDidMount =() => { 
    let nV = this.state.value + 'received'; 
    this.setState({ 
    newValue: nV, 
    }); 
} 

tabClick = (val) => { 
    this.setState({ 
    value: val, 
    }); 
} 

render() { 
    return (
    <Tabs onTabClick={this.tabClick}> 
     <Tab val='v2'> 
     {this.state.newValue} 
     </Tab> 
     <Tab val='v3'> 
     {this.state.newValue} 
     </Tab> 
    </Tabs> 
) 
} 

これは私が直面している問題のシナリオ例です。プログラムが最初に読み込まれると、アクティブなタブv1 receivedに表示されます。私が別のタブをクリックすると、私はvalueの状態値を変更し、componentDidMountを予期して起動し、各タブの値を変更するnewValueを変更します。しかし、タブをクリックしても何も起こりません。ヘルプは非常に高く評価されるだろう:)reactjsで新しい値を再レンダーする方法は?

+0

あなたは、このクラスの完全なコードを共有してもらえますか?私はいくつかの問題に気付きましたが、まず 'this.tabClick'が本当に実行されたかどうかを知りたいと思います。 – Win

+0

はい、私はロギングによってチェックしました:) –

+0

これは 'this.state'の前に' tabClick'の中に入れてください: 'alert(val)'。結果を教えてください。 – Win

答えて

1

このよう

this.state={ 
    value: 'v1', 
    newValue: 'v1 received', 
} 

tabClick = (val) => { 
     let nV = val + 'received'; 

     this.setState({ 
     value: val, 
     newValue: nV 
     }); 
    } 
+0

私の実際のプログラムと同じようなケースです。 –

+0

@Shockwaveはあなたの最初の 'newValue'を' v1 recieved 'に設定しました。 – abdul

0

それをしないのはなぜあなたがcomponentWillMount()関数の代わりにcomponentDidMount()内の任意の状態を設定する必要があります。

以前のライフサイクル機能は、マウントが行われる直前に呼び出されます。 render()の前に呼び出されるため、ここで状態を変更するのが理想的です。

後者は、リモートエンドポイントからデータをロードするために機能を呼び出す必要がある場合に最も適しています。 componentDidMount()はrender関数の後に呼び出され、この関数で状態が変更された場合、render()関数が再度呼び出されます。

参考: https://facebook.github.io/react/docs/react-component.html#componentwillmount https://facebook.github.io/react/docs/react-component.html#componentdidmount

+2

tabClickはすでに矢印機能のためにボンディングされています - http://blog.andrewray.me/react-es6-autobinding-and-createclass/(ソリューション4:ファットアロークラスメソッド) –

+0

@KnutHerrmannこれをありがとう。私はこのキーワードが今どのように機能しているのかよく理解しています。それに応じてコメントを更新します。 –

関連する問題