2017-04-28 17 views
0

私は反応コンポーネントPを持っています。 AとB. Bのレンダリングに使用するいくつかの値を取得するために、Aによって変更できるPの状態Sがありますが、それは関数を介してBのレンダリングに使用される値を取得するために使用されます。非常に不均衡な列を持つ表を何らかの形でレンダリングする値になります。これはBの最初のレンダリングでは起こりません。だから、Sが変更されるたびに "B"を "リセット"するか、またはアンマウントするにはどうすればよいですか?反応コンポーネントのアンインストール...どこかから

注:ここでは

var UsersTable = React.createClass ({ 

    getInitialState: function() { 
     return {sel_Options: this.props.ini_Options, 
       sel_valueArray: this.props.ini_valueArray 
       }; 
    }, 

    handleSelectChange (value) { 
     console.log('You\'ve selected:', value); 
     this.setState({sel_valueArray: value }); 
    }, 

    render: function() { 

     return(
      <div> 
       <div> 
        <Select name = "form-field-name" options = {this.state.sel_Options} value = {this.state.sel_valueArray} multi={true} onChange={this.handleSelectChange}/>     
       </div> 

       <div> 
        <BootstrapTable data={this.props.ini_usersTbl} striped search cellEdit={ cellEditProp } height='600px' insertRow={ true } scrollTop={ 'Bottom' } multiColumnSearch={ true } options={ options } headerStyle = {{ background: '#ebf5ff'}} >  
         { 
         rAll_column_components(compsMap, this.state.sel_valueArray) 
        } 
        </BootstrapTable> 
       </div> 
      </div> 

     );  
    } 


}); 

、sel_Optionsに提示することができ、すべての列名を持つ配列を持っている:私はAのコードとB

おかげ

コードを変更することはできませんテーブル。 sel_valueArrayには、ユーザーが実際に表に表示している列名があります。 rAll_column_components(compsMap、this.state.sel_valueArray)は、テーブルに列を表示するために使用されるすべてのコンポーネントを取得します。

別のノート:

<TableHeaderColumn dataField={'lastName'} width={'180'} dataSort headerAlign='left' editable={JSON.parse('{"type": "textarea" }')}>{'Last Name'}</TableHeaderColumn> 

と毎回、それが各列の元の値とその配列を返し呼ばれる:
rAll_column_componentsは、その要素が見えるTableHeaderColumnコンポーネントのリストを返しています。ただし、表はこれらの列を表示できますが、「幅」プロパティーが完全に変更され、列がかなり不均衡に見えます。

+0

状態を更新するたびにforceUpdate()を使用します。またはshouldComponentUpdateを実装します。私はあなたが状態に割り当てる価値は複雑だと思うので、それを更新と比較することはできません。 –

+0

実際にはっきりしない、いくつかのコードを投稿できますか? – Aaron

答えて

0

ライフサイクルメソッドcomponentWillUpdateを使用してください。状態が変わるたびに実行されます。このようなもの。

componentWillUpdate(nextProps, nextState){ 
if(nextState.s != this.state.s) 
    //reset B 
} 

Sが変化したときにコンポーネントがとにかくBをリセットすべきである//reset Bthis.forceUpdate()ことができます。だから問題は、私の意見ではkey小道具で問題が起きる可能性があり、Sが変更されたときにユニークではないので、新しい状態の再レンダリングが適切に行われていないように思われる(したがって、相違するアルゴリズムが正しく動作しない)。

+0

これを試してみてください: \t componentWillUpdate(nextProps、nextState){ if(nextState.s!= this.state.s) this.forceUpdate(); }、 と効果なし –

+0

'sel_valueArray'は'選択 '権限で変更されていますか?コンソールが正しい値を出力していますか?私が信じているエラーは、この 'rAll_column_components(compsMap、this.state.sel_valueArray)'です。これはマッピング関数です(配列を列にマップします)。ここに 'keys 'のエラーがあります。この機能を投稿できますか? – mrinalmech

+0

機能は、選択した列が表示されるたびにうまく機能しています。問題は、幅の値が尊重されず、一部の列が他の列の4倍の幅で表示されることです。 –

関連する問題