React Native와 Redux Form의 조합으로 키보드 입력 중에 submit해도 입력 내용이 반영되지 않는 문제
덧붙여서 iPhone에서 밖에 확인하고 있지 않으므로, Android에서 같은가는 불명합니다.
문제
로그인 폼 등으로 TextInput에 입력할 때, 폼에 focus된 채로 로그인 버튼을 누르면, 입력중의 문자는 dispatch 되지 않는다.
다음 스크린샷과 같은 상황입니다.
이 상황이라면 로그인 버튼을 눌러도 비밀번호가 입력되지 않은 취급이 되어, 검증 에러가 표시되어 버립니다.
해결 방법
Redux Form의 Field input props에
onChange()
가 있기 때문에 TextInput
의 onChangeText
prop에 전달하면 해결됩니다.Redux Form -Field
다음과 같이 TextInputForm의 파트를 만듭니다. 관계없는 부분은 깎고 있습니다.
TextInputForm을 이용한 전체 코드는 다음과 같습니다.
@decorator
사용하고 있습니다.const TextInputForm = (props) => {
const { input, style, label, ...inputProps } = props
return (
<View>
<Text>{label}</Text>
<TextInput
{...inputProps}
style={style}
onChangeText={text => input.onChange(text)} //これを追加
/>
</View>
);
}
import React, { Component } from 'react'
import { reduxForm, Field } from 'redux-form'
import { Text, TextInput, View, TouchableOpacity } from 'react-native'
@reduxForm({
form: 'login',
validate: values => {
const errors = {}
if (!values.id) errors.id = 'IDを入力してください'
if (!values.password) errors.password = ' パスワードを入力してください'
return errors
}
})
export default class Login extends Component {
login = values => {
// 何か処理
}
render() {
const { handleSubmit, error } = this.props
return (
<View style={styles.root}>
<View>
<Field
name='id'
label='ID'
style={styles.input}
component={TextInputForm}
/>
</View>
<View>
<Field
name='password'
label='パスワード'
style={styles.input}
component={TextInputForm}
secureTextEntry
/>
</View>
<TouchableOpacity onPress={handleSubmit(this.login)} style={styles.button}>
<Text style={{color: '#fff', fontSize: 20}}>ログイン</Text>
</TouchableOpacity>
</View>
)
}
}
이것으로 해결하려면 하지만 onChangeText가 호출 될 때마다 dispatch되어 있기 때문에 성능에 영향을 줄 수 있습니다.
Reference
이 문제에 관하여(React Native와 Redux Form의 조합으로 키보드 입력 중에 submit해도 입력 내용이 반영되지 않는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryusaka/items/033a7e2bb0d9ba3bd2c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)