Очистить текстовый ввод с помощью TouchableOpacity, не отключая клавиатуру?

я хочу создать супер простой чат. Для этого у меня есть TextInput и TouchableOpacity для отправки сообщения и очистки Textinput.

Проблема: когда я отправляю сообщение, текстовый ввод очищается, НО, когда я снова начинаю писать, старый текст снова копируется в текстовый ввод (+ новый символ). Однако, если клавиатура закрывается после отправки и очистки, все работает отлично.

Есть ли способ полностью очистить TextInput с помощью TouchableOpacity?

Ниже приведен код и несколько попыток, выполненных мной, но ни одна из них не сработала. Заранее спасибо,

Маффиниус

      <View style={{flexDirection: 'row'}}>
      <TextInput
      placeholder="Schreibe eine Nachricht"
      onChangeText={(text) => this.setState({newMsg : text})}
      style={{width: 300}}
      ref={'ref1'}
      />
      <TouchableOpacity
      onPress={this.sendMessage}
      >
      <Text> --> </Text>
      </TouchableOpacity>
      </View>
      

sendMessage = () => {
  this.state.MsgData.push({msg: this.state.newMsg, id: this.props.global.userId, timestamp: 8888});
  this.refs['ref1'].clear();
  this.setState({newMsg: ""});
  //this.refs['ref1'].setNativeProps({text: ''})
  //Keyboard.dismiss();

}

  1. Пункт списка

person Maffinius    schedule 10.08.2017    source источник


Ответы (1)


Используйте defaultValue prop для установки значения состояния (https://facebook.github.io/react-native/docs/textinput.html#defaultvalue)

<TextInput
  placeholder="Schreibe eine Nachricht"
  onChangeText={(text) => this.setState({newMsg : text})}
  style={{width: 300}}
  ref={(input) => this.ref1 = input}
  defaultValue={this.state.newMsg}
/>

См. Этот пример для полной реализации: https://snack.expo.io/SkuH8hKPb

person Samuli Hakoniemi    schedule 10.08.2017
comment
Разве это не должно быть просто ценностью? - person EnriqueDev; 10.08.2017
comment
Прежде всего, спасибо за быстрый ответ: пример кода почти работает, НО вам нужно добавить пробел после текста сообщения (в противном случае последнее слово или символ все еще копируется в текстовый ввод, когда я снова начинаю писать). Есть ли способ исправить это? (добавление пробела вручную не работает). - person Maffinius; 10.08.2017