React Native TextInput 不允许输入/文本更改

Posted

技术标签:

【中文标题】React Native TextInput 不允许输入/文本更改【英文标题】:React Native TextInput wont allow typing/text change 【发布时间】:2018-07-09 16:43:06 【问题描述】:

我有一个具有 TextInput 和 2 个按钮的组件。 1 个按钮递增,其他递减。我在 TextInput 上有一个 onChange 和 value,当单击按钮时,值会发生变化(输入中的文本增加或减少),但是通过 TextInput 输入值,它不起作用。它不允许输入任何内容。单击递增/递减按钮后,退格键甚至不起作用。以为我会把我的代码放在这里,看看是否有人能指出我所缺少的。我认为这与值上的 .toString() 有关,因为当我删除它时,我可以输入 TextInput,但我需要 .toString() 在那里才能输入数字并将初始值设为 @ 987654323@.

这是父组件:

  measurementValue = (measurement) => 
    this.setState( measurement );
  

  updateMeasurement = () => 
    this.measurementValue(this.state.measurement);
  

  decrement = () => 
    this.measurementValue(this.state.measurement - 1);
  

  increment = () => 
    this.measurementValue(this.state.measurement + 1);
  

  render() 
    return (
      <View>
        <MeasurementControl
          updateMeasurement=this.updateMeasurement
          decrement=this.decrement
          increment=this.increment
          measurement=this.state.measurement
        />
      </View>
    );
  

这是子组件:

export class MeasurementControl extends Component 

  render() 
    const 
      updateMeasurement,
      decrement,
      increment,
      measurement,
     = this.props;
    const styles = getStyles();

    const value = measurement === null
    ? ''
    : measurement;

    return (
      <View style=styles.container>
        <View style=styles.input>
          <TextInput
            style=styles.inputText
            keyboardType='numeric'
            placeholder='Enter #'
            onChangeText=updateMeasurement
            value=value.toString()
          />
        </View>
        <View style=styles.buttonWrapper>
          <Button
            buttonStyles=styles.decrementButton
            textStyles=styles.decrementButtonText
            onPress=decrement
          >
            __
          </Button>
          <Button
            buttonStyles=styles.incrementButton
            textStyles=styles.buttonText
            onPress=increment
          >
            +
          </Button>
        </View>
      </View>
    );
  

【问题讨论】:

删除 .toString() on value 是否有效? @floor 实际上是这样,我实际上只是用这个发现编辑了我的初始帖子。 删除 toString 并将您的值常量行更改为 const value = measure ?测量:空 【参考方案1】:

您的TextInput 有一个名为onChangeText 的属性,每次写入输入时都会触发此事件

查看我的代码

<TextInput
    style=styles.inputText
    keyboardType='numeric'
    placeholder='Enter #'
    onChangeText=(text) => 

        if(text === "")
            updateMeasurement(null);
            return;
        

        if(isNaN(text))    //this will allow only number
            return;
        updateMeasurement(parseInt(text))
    
    value=value.toString()
/>

updateMeasurement = (value) => 
    this.measurementValue(value);

【讨论】:

这是最接近完全工作的状态。现在,当我在输入字段和退格键中有一个值所以什么都没有时,它会恢复为NaN,而不是它的初始值null。有没有办法让它再次显示为空白而不是NaN 有趣。所以现在按退格键会使其成为0 而不是NaN,但是有没有办法让它只是空白以便我的占位符文本显示? 只需使用空字符串拨打电话updateMeasurement 有道理。谢谢! 我将其设置为返回 null 而不是空字符串,因为我上面的值函数将 null 设置为空字符串以供 SQL 表读取,这解决了我的所有问题。【参考方案2】:

您缺少的部分是在更改时更新值

onChangeText=(text) => updateMeasurement(text)


updateMeasurement = (text) => 
    this.measurementValue(text);
  

【讨论】:

text 是一个设定值还是可以使用任何词? 可以是任何东西 你从回调中获取值并传递给你的函数 所以我实现了这个并遇到了一个问题。当我输入5 的值,然后使用增量按钮时,它只是将1 添加到5 (51111),而不是将其更改为6

以上是关于React Native TextInput 不允许输入/文本更改的主要内容,如果未能解决你的问题,请参考以下文章

删除行时如何使多行TextInput缩小(React-Native)?

如何使用 react-native 的 TextInput 的 `selectionState` 属性?

React Native 之 TextInput(多个语法知识)

fontFamily 'Arial' 不是使用 react-native-textinput-effects 的系统字体

TextInput 在 react-native 中隐藏在键盘后面

React Native - @emotion/native - TextInput 占位符文本颜色属性