2017-01-26 29 views
0

每次单击按钮时,都需要添加一个输入框(input-0,input-1 ...)。以下是相关的代码。e.target.value在添加动态输入数据时反应不明确

//国家

 this.state = { 
     newText: {} 
     }; 

//代码添加动态输入文本

 addInputText =() => { 
     let dynamicTextsNo = Object.keys(this.state.newText).length; 
     let newInputId = dynamicTextsNo+1; 
     let dynamicTextArr = this.state.newText; 
     let newTextId = 'input-'+dynamicTextsNo; 
     dynamicTextArr[newTextId] = ''; 
     let newState = { ...this.state, newText: dynamicTextArr } 
     this.setState(newState); 
     } 

//代码来呈现动态输入文本。

 dynamicTextArea =() => { 
     return Object.keys(this.state.newText).map((key) => { 
      return (<InputGroup key={key} borderType='underline'> 
         <Input placeholder='Type your text here' value={this.state.newText[key]} onChange={this.changeInput}/> 
        </InputGroup> 
       ); 
     }); 
     } 

//渲染功能

 render() { 
     return <View>{this.dynamicTextArea()}</View> 
     } 

//处理输入

changeInput = (e) => { 
    console.log(e.target.value); // **this comes out to be undefined.** 
    } 

为什么e.target.value在changeInput功能未定义?

P.S.完整代码的jsfiddle链接:https://jsfiddle.net/johnnash03/9by9qyct/1/

+0

你可以上传你的代码JSFiddle.net好吗?这会让你更容易地帮助你调试你的问题。 –

+0

@KennyMeyer我已提供完整代码 –

+0

@johndoe的链接,我将您的代码改编为:https://jsfiddle.net/mrlew/gk55wLx1/。但changeInput没有错误。检查控制台。 – mrlew

回答

0

您必须使用bind像这样<Input placeholder='Type your text here' value={this.state.newText[key]} onChange={this.changeInput.bind(this)}/>

+0

绑定后仍然未定义。 –

2

不同的浏览器中输入文本元素,则event参数传递反应原住民TextInput.onChange回调没有一个叫target属性。

相反,使用

<TextInput 
    onChange={(event) => event.nativeEvent.text} 
/> 

<TextInput 
    onChangeText={(text) => text} 
/>