2017-10-12 3 views
0

大きなコンポーネントをモジュール化して、その一部を再利用できるようにしたいと思います。小道具として渡された関数からsetStateを呼び出す

私は操作を行うことができるリストをレンダリングします:私のモーダル状態を更新して閉じるようにしてから、サーバコールでreduxアクションを起動します。

だから私は、カスタム動作を定義する関数を渡すしたいと思います:

var handleSubmit = (name, description, author) => { 

    if (inputsValidated(name, description)) { 
     this.setState({ addingNewProject: false, errorMessage: '' }); 

     var payload = { name: name, date: new Date(), description: description, author: author}, 
      routeToPushAfter = `/app/users/${author._id || 'notsigned'}`, 
      serverRoute = allRoutes.projectURL, 
      type = 'project' 

      this.props.postData(payload, routeToPushAfter, serverRoute, type); 
    } 

    else { 
     this.setState({ errorMessage: 'Please fill out form' }); 
    } 
} 

は、その後のコンポーネントにこの関数を渡します。

render() { 
    return (
     <div style={main}> 
      <DynamicList {...this.props} /> 
      <DynamicList {...this.props} handleSubmit={handleSubmit} handleDelete={handleDelete} /> 
     </div> 
    ); 
} 

問題は、this.setStateが親コンポーネントにバインドされていることです。どのようにして(Reduxを使わずに)ローカル状態を変更できる関数を渡すことができますか?

ありがとうございました!

+1

あなたは[高次成分](https://reactjs.org/docs/higher-order-componentsを使用することができます。 html) –

+0

状態にエラーメッセージを残す代わりに、エラーメッセージをプロップの一部としてリストに渡す必要があります。はい、これはHOCのコンセプトです。 – robbymurphy

+0

私はHOCを今読んでいます、ありがとう。 @robbymurphyは、errormessageを解決しますが、modalを開いたり閉じたりするのに必要なaddingNewProjectのブール値ではありません。 – DSz

答えて

-1

あなたはDynamicListのコンストラクタ内部のコンポーネントに機能を結合することができる:

constructor(props) { 
    super(props); 
    if (this.props.handleSubmit) { 
    this.handleSubmit = this.props.handleSubmit.bind(this); 
    } 
} 
+1

これはバンドです。これにより、DynamicListとそのコンテナの間に緊密な結合ができます。 DynamicListは "ダム"で、単に独自のエラー状態を処理する代わりにレンダリングする方法を指定する小道具を受け入れる必要があります。特に、エラーを生成している関数がDynamicListコンポーネントの外部にあるためです。 – robbymurphy

関連する問題