如何使用 redux 清除 React native 中发送按钮上的 TextInput
How to clear TextInput on send button in React native with redux
我正在使用 react native 和 redux 开发聊天应用程序,消息通过发送按钮发送。但是每当我点击发送按钮发送消息时,TextInput
都没有清除。
我想在点击发送按钮时清除 TextInput
字段。在这里,我在 redux 中工作,所以我不想将 state
与 value
一起使用。
代码如下:
class Chat extends Component {
componentWillMount() {
this.props.fetchChat(this.props.receiverId);
}
message(text) {
this.props.writeMsg(text);
}
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
}
render() {
return (
<View style={{ flex: 1 }}>
<FlatList
inverted={-1}
style={styles.list}
extraData={this.props}
data={this.props.convo}
keyExtractor = {(item) => {
return item.id;
}}
renderItem=
<ChatItem value={this.renderItem} />
/>
<MessageInput
onChangeText={text => this.message(text)}
onPress={this.onSend }
/>
</View>
);
}
}
这是组件 MessageInput 的代码:
<View style={inputContainer}>
<TextInput style={inputs}
placeholder="Write a message..."
onChangeText={onChangeText}
/>
</View>
<TouchableOpacity style={btnSend} onPress={onPress }>
<Icon
name='send'
type='MaterialIcons'
color='#fff'
style={iconSend}
/>
</TouchableOpacity>
您可以尝试在消息发送后清除 text
属性,(如果文本 属性 是 TextInput
中呈现的文本):
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.message('');
}
或
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.props.writeMsg('');
}
您可以使用 ref
清除 Chat
中的值。
在构造函数中添加一个新引用
constructor(props) {
super(props);
this.textInput = React.createRef();
}
将 ref
传递给 MessageInput
。
render() {
...
<MessageInput
onChangeText={text => this.message(text)}
onPress={this.onSend }
ref={this.textInput}
/>
...
}
修改MessageInput
(我假设它是一个功能组件)
const MessageInput = (props, ref) => (
...
<TextInput style={inputs}
placeholder="Write a message..."
onChangeText={onChangeText}
ref={ref}
/>
...
)
最后,切换回 Chat
组件并更新 onSend
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.textInput.current.clear(); // Clear the text input
}
我正在使用 react native 和 redux 开发聊天应用程序,消息通过发送按钮发送。但是每当我点击发送按钮发送消息时,TextInput
都没有清除。
我想在点击发送按钮时清除 TextInput
字段。在这里,我在 redux 中工作,所以我不想将 state
与 value
一起使用。
代码如下:
class Chat extends Component {
componentWillMount() {
this.props.fetchChat(this.props.receiverId);
}
message(text) {
this.props.writeMsg(text);
}
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
}
render() {
return (
<View style={{ flex: 1 }}>
<FlatList
inverted={-1}
style={styles.list}
extraData={this.props}
data={this.props.convo}
keyExtractor = {(item) => {
return item.id;
}}
renderItem=
<ChatItem value={this.renderItem} />
/>
<MessageInput
onChangeText={text => this.message(text)}
onPress={this.onSend }
/>
</View>
);
}
}
这是组件 MessageInput 的代码:
<View style={inputContainer}>
<TextInput style={inputs}
placeholder="Write a message..."
onChangeText={onChangeText}
/>
</View>
<TouchableOpacity style={btnSend} onPress={onPress }>
<Icon
name='send'
type='MaterialIcons'
color='#fff'
style={iconSend}
/>
</TouchableOpacity>
您可以尝试在消息发送后清除 text
属性,(如果文本 属性 是 TextInput
中呈现的文本):
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.message('');
}
或
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.props.writeMsg('');
}
您可以使用 ref
清除 Chat
中的值。
在构造函数中添加一个新引用
constructor(props) {
super(props);
this.textInput = React.createRef();
}
将 ref
传递给 MessageInput
。
render() {
...
<MessageInput
onChangeText={text => this.message(text)}
onPress={this.onSend }
ref={this.textInput}
/>
...
}
修改MessageInput
(我假设它是一个功能组件)
const MessageInput = (props, ref) => (
...
<TextInput style={inputs}
placeholder="Write a message..."
onChangeText={onChangeText}
ref={ref}
/>
...
)
最后,切换回 Chat
组件并更新 onSend
onSend = () => {
const { userId , receiverId, text } = this.props;
this.props.sendMessage({userId , receiverId, text});
this.textInput.current.clear(); // Clear the text input
}