2016-12-07 9 views
0

私のアプリケーションには、それぞれtextInputフィールドを持ついくつかのコンポーネントがあります。各textInputがサブミットされているので、次のコンポーネントのtextInputフィールドにフォーカスします。代わりに、親コンポーネントの私の機能は言う:コンポーネント内のテキスト入力refを読み込むときに、ネイティブリファレンスが未定義です

undefined is not an object (evaluating'_this.refs[nextField].focus')

これは私のコードです:

export default class Parent extends React.Component { 
.... 
render() { 
    return (
     <ScrollView> 
     <View style={{padding:20}}> 
      <One 
       ... 
       onSubmitEditing={this.focusNextField("2")} /> 

       <TWO 
       .../> 
    ) 
    } 
focusNextField = (nextField) => { 
    alert(nextField) 
    this.refs[nextField].focus() 
} 
} 

export default class One extends React.Component { 
    render() { 
     return (
      <View style={{paddingBottom:5}}> 
       <TextInput 
       ref="1" 
       style={{height:60,paddingLeft:20}} 
       placeholder="Enter your name" 
       onSubmitEditing={this.props.onSubmitEditing} /> 
      </View> 
    ) 
    } 
} 


export default class Two extends React.Component { 
    render() { 
     return (
      <View style={{paddingBottom:5}}> 
       <TextInput 
       ref="2" 
       keyboardType="phone-pad" 
       style={{height:60,paddingLeft:20}} 
       placeholder="Enter your age" /> 
      </View> 
    ) 
    } 
} 

どのように異なるコンポーネントからrefsを使用することができますか?

答えて

1

他のコンポーネントのリファレンスにアクセスするには、そのコンポーネントにもリファレンスとしてアクセスする必要があります。たとえば、this.refs[nextField].refs[childref]です。あなたはDOM要素にアクセスするためには、ツリー を下に移動することができますこの方法では、あなたがReact.findDOMNode()

export default class Parent extends React.Component { 
.... 
render() { 
    return (
     <ScrollView> 
     <View style={{padding:20}}> 
      <One 
       ... 
       onSubmitEditing={this.focusNextField.bind(this, "two","2")} /> 

       <TWO ref="two" 
       .../> 
    ) 
    } 
focusNextField = (nextField, childref) => { 
    alert(nextField) 
    React.findDOMNode(this.refs[nextField].refs[childref]).focus(); 
} 
} 

export default class One extends React.Component { 
    render() { 
     return (
      <View style={{paddingBottom:5}}> 
       <TextInput 
       ref="1" 
       style={{height:60,paddingLeft:20}} 
       placeholder="Enter your name" 
       onSubmitEditing={this.props.onSubmitEditing} /> 
      </View> 
    ) 
    } 
} 


export default class Two extends React.Component { 
    render() { 
     return (
      <View style={{paddingBottom:5}}> 
       <TextInput 
       ref="2" 
       keyboardType="phone-pad" 
       style={{height:60,paddingLeft:20}} 
       placeholder="Enter your age" /> 
      </View> 
    ) 
    } 
} 
+0

感謝を使用する必要がありますが、これはまだ私にエラーを与える: '未定義のオブジェクトではありません(evaluating'_this.refs [nextField] .refs) ' – user94628

+0

あなたのfocusNextField関数にログを記録してみて、パラメータを取得しているかどうかを確認してください。私の推測では、それらをバインドする必要があるということです –

+0

バインドされたパラメータを含む更新されたコードを試してください –

関連する問題