【问题标题】:How to control defaultValue of React Native's <TextInput>?如何控制 React Native 的 <TextInput> 的 defaultValue?
【发布时间】:2017-02-12 04:53:33
【问题描述】:

我有一个带有defaultValue 设置的&lt;TextInput/&gt; 和一个按钮,它将触发并将&lt;TextInput&gt;defaultValue 传递到其他地方。

但是如何将&lt;TextInput/&gt;defaultValue 传递给&lt;TouchableHighlight/&gt;onPress 方法呢?

这就是我想要达到的目标:

changeName(text) {
    this.setState({nameNow: text}) //How can I immediately set the defaultValue='PassMeIn' to nameNow? Because this method would never be called unless text is changed within TextInput
}

sendOff() {
    //Would like to access the defaultValue='PassMeIn' here whenever sendOff() is called. How can I?
}

render() {

    return (
      <View>
            <TextInput 
                defaultValue='PassMeIn' 
                onChange={this.changeName} 
                value={this.state.nameNow}
            />
            <TouchableHighlight onPress={this.sendOff}/>
                <Text>Button</Text>
            </TouchableHighlight>
      </View>
    )
}

【问题讨论】:

    标签: javascript css react-native textinput jsx


    【解决方案1】:

    一方面,render 方法不能返回多个节点。我相信&lt;TextInput/&gt; 应该被&lt;TouchableHighlight/&gt; 组件包裹,比如:

    render() {
    
      return (
        <TouchableHighlight onPress={this.sendOff}>
          <TextInput 
            defaultValue='PassMeIn' 
            onChange={this.changeName} 
            value={this.state.nameNow}
          />
        </TouchableHighlight>    
      )
    }
    

    这将使从&lt;TouchableHightlight&gt;&lt;TextInput 的prop 可以用作defaultValue,并且您可以在&lt;TouchableHighlight&gt; 组件中访问它。

    【讨论】:

    • 我对原始帖子中的代码进行了更改。请看一看。
    • 我遇到了将整数值设置为默认值的问题。 value.toString() 解决了我的问题。
    【解决方案2】:

    您可以将 defaultValue 存储在新状态中,然后您可以在两个地方访问它

    constructor(props) {
     super(props);
     this.state = {
      //...other state
      defaultValue: "PassMeIn"
     };
    
    //...other code
    
    sendOff() {
      //...do things with this.state.defaultValue
    }
    
    render() {
    
      return (
        <TextInput 
            defaultValue={this.state.defaultValue} 
            onChange={this.changeName} 
            value={this.state.nameNow}
        />
        <TouchableHighlight onPress={this.sendOff}/>
    )
    }
    

    【讨论】:

    • 我遇到了将整数值设置为默认值的问题。 value.toString() 解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多