2015-11-13 5 views
8

私はこれをしばらくの間動作させようとしており、次のようにする方法がわからない。フォームコンポーネントには、通常のHTMLマークアップと入力を含む子があります。子が入力の場合は、attachToFormdetachFromForm関数を追加します。それが入力でない場合、要素を子入力フィールドがないことを確認するために子を横断し続けたいと思います。 Wetherかどうかは要素ですが、私はまだそれを私のページに表示したいのですが、私は入力に関数を追加したいだけです。他の子供を触らずに子供の子を移動してすべての入力に機能を追加する

問題は、ラベルとタイトルを削除して、入力のみを返すという機能しか得られないということです。私が知っているのは、newChildrenに入力を持つ要素を追加するだけなので、他の要素をelseセクションにプッシュすると、重複が発生し、これを行う別の方法が考えられます。私は基本的なJSを理解していないか、または脳の隙間を持っているかどうかわかりません。

React.Children.forEach(children, function(child) { 
     var current = child; 
     if (child.props && child.props.name) { 
      this.newChildren.push(React.cloneElement(child, { 
       detachFromForm: this.detachFromForm, 
       attachToForm: this.attachToForm, 
       key: child.props.name 
      })); 
     } else if (child.props && child.props.children){ 
      this.newChildren.push(child); 
      this.registerInputs(child.props.children); 
     } else { 
      *need to keep track of parent elements and elements that do not have inputs 
     } 
    }.bind(this)); 

編集:必要に応じてわからないが、これはあると脇に、私は次の操作を行うが、取得したいずっと簡単に出始めた例フォームイム

return ( 
      <Modal className="_common-edit-team-settings" title={`Edit ${this.props.team.name}`} isOpen={this.props.modalIsOpen && this.props.editTeamModal} onCancel={this.props.toggleEditTeamModal} backdropClosesModal> 

       <Form onSubmit={this.saveChanges}>  
        <FormSection className="edit-team-details" sectionHeader="Team Details"> 
         <FormField label="Name"> 
          <Input name="name" value={this.state.values.name} onChange={this.handleInputChange} type="text" placeholder={this.props.team.name}/> 
         </FormField> 
         <FormField label="Mission"> 
          <Input name="mission" value={this.state.values.mission} onChange={this.handleInputChange} type="text" placeholder={this.props.team.kitMission || 'Kit Mission'} multiline /> 
         </FormField> 
        </FormSection> 

        <FormSection className="privacy-settings" sectionHeader="Privacy Settings"> 
         <FormField label="Included in global search results" > 
          <SlideToggle name="globalSearch" defaultChecked={this.state.values.globalSearch} onChange={this.handleCheckedChange} type="checkbox" /> 
         </FormField> 
         <FormField label="Accessible by anyone" > 
          <SlideToggle name="public" defaultChecked={this.state.values.public} onChange={this.handleCheckedChange} type="checkbox" /> 
         </FormField> 
         <FormField label="Secured with WitCrypt" > 
          <SlideToggle name="witcryptSecured" defaultChecked={this.state.values.witcryptSecured} onChange={this.handleCheckedChange} type="checkbox" /> 
         </FormField> 
        </FormSection> 
        <FormSection sectionHeader="Participants"> 
         {participantsList} 
         <div id="add-participant" className="participant" onClick={this.toggleAddParticipantModal}> 
          <span className="participant-avatar" style={{backgroundImage:'url(/img/blue_add.svg)'}}></span> 
          <span>Add a Participant</span> 
          <span className="add-action roll"><a></a></span> 
         </div> 
        </FormSection> 
        <Button type="hollow-primary" size="md" className="single-modal-btn" block submit>Save</Button> 
       </Form> 


       <AddParticipant people={this.props.people} toggleAddParticipantModal={this.props.toggleAddParticipantModal} modalIsOpen={this.props.modalIsOpen} toggleAddParticipantModal={this.toggleAddParticipantModal} addParticipantModal={this.state.addParticipantModal} /> 
      </Modal> 
     ); 

を横断:

「プロパティはattachToFormを追加できません。オブジェクトは拡張可能ではありません」

理由を知っている人は、私に知らせてください。エラーメッセージの

registerInputs: function (children) { 

    React.Children.forEach(children, function (child) { 

     if (child.props.name) { 

     child.props.attachToForm = this.attachToForm; 
     child.props.detachFromForm = this.detachFromForm; 
     } 

     if (child.props.children) { 
     this.registerInputs(child.props.children); 
     } 
    }.bind(this)); 
    } 

答えて

1

判断すると、あなたは不変propオブジェクトに問題があります。 0.14 propに反応から出発し、「凍結」さ:

propsオブジェクトは、今では、構成要素サポートされなくなりましたを作成した後に小道具を突然変異、凍結されています。ほとんどの場合、代わりにReact.cloneElementを使用する必要があります。この変更により、コンポーネントの理由が簡単になり、上記のコンパイラの最適化が可能になります。だから、どこかにあなたのコード内のエラーの原因となっpropオブジェクトを拡張しよう

Blog post on this

prop相互作用のさまざまな部分をtry..catch構造でラップすると、正確な問題箇所が示されます。

関連する問題