使用React Native中的Redux AddTodo示例。下面的第一个AddTodo示例使用state来存储TextInput值并且工作正常。
class AddTodo extends React.Component{
constructor(props){
super(props);
this.state = { todoText: "" };
}
update(e){
if(this.state.todoText.trim()) this.props.dispatch(addTodo(this.state.todoText));
this.setState({todoText: "" });
}
render(){
return(
<TextInput
value = {this.state.todoText}
onSubmitEditing = { (e)=> { this.update(e); } }
onChangeText = { (text) => {this.setState({todoText: text}) } } />
);
}
}
但是,遵循一些Redux示例,以下代码要短得多,除了TextInput
value
在提交后未被清除
let AddTodo = ({ dispatch }) => {
return (
<TextInput
onSubmitEditing = { e => { dispatch(addTodo(e.nativeEvent.text)) } }
/>
)
}
有什么方法可以清除onSubmitEditing的InputText值吗?
答案 0 :(得分:42)
将ref添加到TextInput,例如:
<TextInput ref={input => { this.textInput = input }} />
然后调用this.textInput.clear()
清除输入值
答案 1 :(得分:9)
它将提供默认的明文按钮。
<TextInput clearButtonMode="always" />
答案 2 :(得分:4)
根据React 16.3之后的更改和建议,您将需要使用React.createRef在构造函数中检索引用:
在构造函数中:
this.myTextInput = React.createRef();
在渲染功能:
<TextInput ref={this.myTextInput} />
然后您可以致电
this.myTextInput.current.clear();
答案 3 :(得分:3)
我使用的是母语 这就是我的工作方式
constructor(props) {
super(props);
this.searchInput = React.createRef();
}
<Input
placeholder="Search"
ref={this.searchInput}
/>
然后每当我要清除时,我就使用
this.searchInput.current._root.clear();
答案 4 :(得分:1)
这对我有用
ref={element => {
//Clear text after Input
this.attendee = element
}}
onSubmitEditing={this.handleAddPress}
和强>
this.attendee.setNativeProps({ text: '' })
//输入后清除文字
答案 5 :(得分:1)
以下代码示例:
<TextInput
onChangeText={(text) => this.onChangeText(text)}
ref={component => this._textInput = component}
onSubmitEditing={() => {
this.clearText()
}}
/>
clearText(){
this._textInput.setNativeProps({ text: ' ' });
setTimeout(() => {
this._textInput.setNativeProps({ text: '' });
},3);
}
答案 6 :(得分:1)
一种更简单的方法是使用value
的{{1}}属性,并使用组件的状态值对象设置textInput的值。
TextInput
答案 7 :(得分:1)
由于使用的是功能组件,因此可以按以下方式使用Hooks。如果您有条件渲染,请检查代码是否在传递给useEffect的函数中定义了todoInput。我假设您的状态变量在依赖项列表中称为todoText。
import {useRef, useEffect} from 'react';
let AddTodo = ({ dispatch }) => {
const todoInput = useRef();
useEffect(()=>todoInput.current.clear(),[todoText]);
return (
<TextInput
ref={todoInput}
onSubmitEditing = { e => { dispatch(addTodo(e.nativeEvent.text)) } }
/>
)
}
答案 8 :(得分:1)
感谢@AndréAbboud的帮助,我能够清除我的TextInput字段,但是根据我的自定义TextInput,我在实现上做了些许更改。
请查看用于实施的代码和方法。据我所知,我已经满足了我需要清除TextInput的要求,如果需要进行任何更改,请在评论中告知。
我所做的就是:
在setupSender.js中
...
this.state = {
clearInput: false,
...
}
...
setupSenderSubmit = () => {
...
this.setState({
clearInput: !this.state.clearInput,
})
...
}
...
<CustomTextInput
labelText="First Name"
onChangeText={(firstName) => this.setState({ firstName })}
clearInput={this.state.clearInput}
value={this.state.firstName}
returnKeyType={ 'next' }
autoFocus={true}
onSubmitEditing={() => this.input2.current.focus()}
></CustomTextInput>
...
并在CustomTextInput.js中
this.state={
clearInput: this.props.clearInput,
}
...
static getDerivedStateFromProps = (props, state) => {
if (props.clearInput !== '' || props.clearInput !== undefined) {
return {
clearInput: props.clearInput
}
}
return null;
}
...
<TextInput
label={this.props.label}
value={!this.state.clearInput ? this.state.text : null}
onChangeText={(text) => {
this.setState({text});
this.props.onChangeText(text)
}
}
</TextInput>
...
答案 9 :(得分:1)
React-Native使用本机库中的Input组件。 这对我有用:
<Input ref={input => {this.textInput = input;}}
然后:
this.textInput._root.clear();
注意:不必使用React.createRef()进行初始化。
答案 10 :(得分:0)
您也可以将 <TextInput/>
的值设置为与状态相同的值,在使用数据后,将状态设置回空字符串:
//state
const [state, setState] = useState({
name: '',
lastname: ''
})
//functions
const newUser = () => {
// Do your magic and after
setState({
name: '',
lastname: ''
})
}
const handleOnChange = () => {
setState({
// change your state
})
}
//render
<TextInput
value={state.name}
placeholder='Name'
onChangeText={/* execute your handleOnChange() */}
/>
<TextInput
value={state.lastname}
placeholder='Lastname'
onChangeText={/* execute your handleOnChange() */}
/>
<Button title='Saved' onPress={() => newUser()} />
希望有用!
答案 11 :(得分:0)
为我工作...
<TextInput
ref={ref => {
this.textInput = ref;
}}
...
/>
通话后功能
clearMsg(){
this.textInput.state.value = ''
}
答案 12 :(得分:0)
在我的功能Component上,我与SubmitHandler一起调用了另一个函数,该函数将注意清除文本
const [text, setText] = useState('');
const anotherFunc = (val) =>{
setText('');
}
return (
<View>
<TextInput
value ={text}
onChangeText ={changeHander}
placeholder = 'Add '
/>
<Button
title = "Add Something "
onPress = {()=> {submitHandler(text) , anotherFunc(text)}}
/>
</View>
)
答案 13 :(得分:0)
this.state = {
commentMsg: '',
}
after submittion
if (response.success)
{
this.commentMsg.clear(); //TODO me
}
<TextInput
style={styles.textInput}
multiline={true}
ref={input => {
this.commentMsg = input
}}
onChangeText={(text) => this.setState({commentMsg: text})}
placeholder ='Comment'/>
答案 14 :(得分:0)
<TextInput
ref={input => { this.name = input }}
/>
this.name.clear();
this.email.clear();
this.password.clear();
this.confirmPassword.clear();
答案 15 :(得分:0)
这对我有用。
在构造函数上初始化myTextInput:
this.myTextInput = React.createRef();
在渲染功能处添加引用:
<Input ref={this.myTextInput} />
然后您可以致电
this.myTextInput.current.value='';
答案 16 :(得分:0)
我编写此代码来清除React Native Find
中的TextInput
您可以检查我的零食:
https://snack.expo.io/@andreh111/clear-textinput-onsubmitediting
代码如下:
OnSubmitEditing
答案 17 :(得分:-1)
对于RN> 0.6
const [msg, setMsg] = useState()
在TextInput内部使用值
<TextInput
onChangeText={(txt) => setMsg(txt)}}
value={msg}
/>
然后在您的按钮按下功能中设置状态
const pressButton = () => {
setMsg('')
}