2016-07-17 13 views
0

私はリアクトを使用していますが、問題が発生しました。 私はユーザーを追加するためのコンポーネントを持っています。リアクション - 同じレンダリングで異なるロジックを持つ2つのコンポーネント

は、AddUser:

export default class AddUser extends React.Component { 
    onClick() { 
     // Save the user. 
    } 

    render() { 
     // Some components. 
    } 
} 

は、今私はEditUserに部品を実装する、renderメソッドは、小道具を通過することができ、ボタンのテキストを除いて、まったく同じです。 しかし、ロジックは異なります.onClickはapiとは別のURLにアクセスし、apiからユーザーの詳細をロードして状態にする必要があります。

私の質問は、これを正しく実装する方法です。 私はAddUserコンポーネントになるベースコンポーネントを作成することを考えました。そして、EditUserコンポーネントはそれを継承し、componentDidMountメソッドをオーバーライドしてAPIからデータをロードします。

そうするベストプラクティスは何ですか?

答えて

1

UserFormコンポーネントを作成し、onSave小道具を持っています。新しいユーザを追加するために、親コンポーネントは、追加ロジックに従ってonSaveを実装し、別の親コンポーネントを更新するために、それに応じて更新ロジックを実装することができる。 UserFormの保存ボタンの名前を別の小道具、たとえばisUpdateに変更することができます。

追加コンポーネント:

import UserForm from "./user_form" 
export default class AddUser extends React.Component { 
    addUser() { 
     // add the user 
    } 

    render() { 
     return <UserForm onSave={this.addUser.bind(this)}> 
    } 
} 

更新コンポーネント:

import UserForm from "./user_form" 
export default class UpdateUser extends React.Component { 
    updateUser() { 
     // add the user 
    } 

    render() { 
     return <UserForm onSave={this.updateUser.bind(this)} isUpdate> 
    } 
} 
+0

として空のオブジェクトまたはnullを渡すadduserのケースのために私はあなたのソリューションを試してみましたが、私はこの問題に遭遇してきました。 私はその状態のユーザを含むUserFormを持っており、それは入力に従ってそれを更新します。 AddUserコンポーネントでは、私はUserFormをレンダリングしてonSaveを渡すだけで、すべての問題は解決します。しかし、私はEditUserにいくつかの問題があります。私はサーバーからデータを取得して、それをUserFormコンポーネントに渡し、データに応じてUserFormの状態を設定する必要がありますが、UserFormコンストラクターは、 EditUser – Pachu

+0

あなたができることの1つは、updateComponentでユーザーをフェッチし、それをUserFormに小道具として与え、次にユーザーがいるか、これが更新操作でない場合にuserFormをレンダリングすることです。後でUserFormでユーザーを設定するには、componentWillReceivePropsメソッドを使用します。レンダリングされる次の小道具が渡され、現在のprops.userがnextProps.userと同じでないかどうかを確認して、nextProps.userでユーザーの状態を設定できます。 – cubbuk

+0

私はちょうどコメントを編集しました。 – Pachu

0

は、念のためにユーザーの値を保持するであろう親コンポーネント基本的にモデルオブジェクトから小道具を渡し、同じコンポーネントは、AddUserを保持編集の

親コンポーネントが小道具

export default class AddUser extends React.Component { 
    constructor(props){ 
     this.state = { 
      firstName: this.props.user ?this.props.user.firstName: '' 
     } 
    } 
    onClick() { 
     // Save the user. 
     if (this.props.user) { 
     //edit user case 
    } else { 
     //add user case 
    } 
    } 

    render() { 
     // Some components. 
    } 
} 
+0

これはいい考えですが、editUserコンポーネントを悪用すると、サーバからcomponentDidMountにユーザのデータを取得する必要があります。つまり、EditUserのデータを取得する前にAddUserのctorが呼び出されます。 – Pachu

関連する問題