2016-06-22 8 views
2

idシステム上で子コンポーネントを既存のReactコンポーネントに動的に追加したい。これを行うには、コンポーネントのレンダリングを行う前に、新しいコンポーネントがIDとともに格納されているコンポーネントのリストがあります。このリストでは、私はidでコンポーネントを取得し、それのaddChild()関数を呼び出すことができます。コンポーネントはその後に再度レンダリングされます。子コンポーネントは、ComponentWithChildsだけでなく、どんなタイプでも構いませんが、これは単なる例です。子どもをReactコンポーネントに動的に追加する

components = {}; 

    var ComponentWithChilds = React.createClass({ 
    getInitialState : function(){ 
     components[this.props.id] = this; //saves the component into the list 
     return {children : []}; 
    }, 
    addChild : function(child){ 
     this.state.children.push(child); 
     this.setState({ 
     children : this.state.children 
     }); 
    }, 
    render : function(){ 
     return React.createElement("div",{},this.state.children); 
    } 
    }); 

    ReactDOM.render(
    React.createElement(ComponentWithChilds, {id:"id1"}), 
    document.getElementById('app') 
); 
    components["id1"].addChild(React.createElement(ComponentWithChilds, {id:"id2"})); //adds a child to the element with id: "id1" 

これは反パターンであり、私は理解することができます。これは、リアクトのいくつかの原則を破るためです。それで、これを反応に優しい方法で実現する最善の方法は何ですか?

+0

はあなたがレンダリング機能の外のコンポーネントをレンダリングしたいと思う理由について教えてください。 –

+0

私はそれらをレンダー機能の外でレンダリングしたくありません。 idを介してコンポーネントに子を追加し、再レンダリングをトリガーして変更が適用されるようにします。 – landunder

答えて

-2

私がこれまで行ってきたことは、データの配列を持ち、これを親コンポーネントのrenderメソッドに渡すことです。

ES6/JSXを使用すると、人生が楽になります。

render() { 
    return (
    <div> 
     { this.childern.forEach(id => <ComponentWithChilds id={id}/> } 
    </div> 
); 
} 

あなたはaddChildメソッドは、次のようになります。

addChild(child) { 
    this.children.push(child); 
} 
+0

外部から 'addChild()'メソッドを呼び出す方法はありますか?どのようにしてコンポーネントにアクセスできますか? – landunder

+1

https://facebook.github.io/react/docs/more-about-refs.html –

+0

コンポーネントにアクセスするのではなく、データにアクセスする必要があります。個人的には、Reactコンポーネントの外にデータを格納し、配列参照を渡します。そうすれば、いつでも好きな場所から配列を更新できます。ベスト・ソリューションのためにReduxをチェックアウトしてください。 –

関連する問題