ReactNative+Type ScriptではTextInput onChangeとUserRef
4364 ワード
userefを使用してフォーカスを移動する
前回はtypescriptで複数のTextInputを必要に応じて整理しました.前回Post
2つのTextInputで、最初のTextInputが入力されてコミットされた場合、userRefを使用して次の入力TextInputにフォーカスを移動します.
以下のように簡単に書くだけであれば、正常に動作します.
const secondRef = useRef();
しかしvscodeにはいくつかの赤い線が見えます.気分が悪いようです.
userefではtypeはnullのままになります.以下に示します.
const secondRef = useRef
onSubmitEditing部分にnullがあるかも?使用します.
onSubmitEditing={() => secondRef.current?.focus()}
2本の赤い糸が消える.
onChangeイベントタイプは?
ReactNativeでonChangeイベントタイプを決定する方法は、vscodeからイベントにカーソルを移動することで、次のような内容が表示されます.
(parameter) e: NativeSyntheticEvent
event typeはNativeSysticsEventと見なすことができる.
onChange関数でevent typeを定義して入れます.
const onChange = (keyvalue: string, e: NativeSyntheticEvent<TextInputChangeEventData>) => {
const {text} = e.nativeEvent
setInputs({
...inputs,
[keyvalue]: text
});
};
でもvscodeから見ると赤い糸が情報は以下の通りです.type NativeSyntheticEvent =/unresolved/any
Cannot find name 'NativeSyntheticEvent'.ts(2304)
解決するために、輸入することができます.
import {
View,
Text,
TextInput,
StyleSheet,
NativeSyntheticEvent,
TextInputChangeEventData } from 'react-native'
完全なコード
import React, {useState, useRef} from 'react'
import {
View,
Text,
TextInput,
StyleSheet,
NativeSyntheticEvent,
TextInputChangeEventData } from 'react-native'
export default function MyFormSecond() {
const secondRef = useRef<TextInput | null>(null);
const [inputs, setInputs] = useState({
name: '',
nickname: ''
});
const { name, nickname } = inputs;
const onChange = (keyvalue: string, e: NativeSyntheticEvent<TextInputChangeEventData>) => {
const {text} = e.nativeEvent
setInputs({
...inputs,
[keyvalue]: text
});
};
const onReset = () => {
setInputs({
name: '',
nickname: '',
})
};
return (
<View>
<TextInput
style={styles.input}
onChange={(e) => onChange("name", e)}
value={name}
onSubmitEditing={() => secondRef.current?.focus()}
/>
<TextInput
style={styles.input}
onChange={(e) => onChange("nickname", e)}
value={nickname}
onSubmitEditing={onReset}
ref={secondRef}
/>
<Text>name: {name}, nickname: {nickname}</Text>
</View>
)
}
const styles = StyleSheet.create({
input: {
height: 50,
width: 200,
margin: 12,
borderWidth: 1,
padding: 10,
},
});
Reference
この問題について(ReactNative+Type ScriptではTextInput onChangeとUserRef), 我々は、より多くの情報をここで見つけました https://velog.io/@jjbrother/Reactnative-Typescript에서-TextInput-onChange-과-useRefテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol