#reactjs #react-native
Вопрос:
Я хочу изменить размер шрифта, нажав на Уменьшить шрифт, увеличить шрифт текста.
Это работает. Но всякий раз, когда я нажимаю на текст с уменьшенным или увеличенным шрифтом, все, что находится внутри TextInput, удаляется, а граница TextInput увеличивается или уменьшается, поэтому размер шрифта тоже меняется. Но я не хочу, чтобы текст внутри TextInput удалялся.
Что мне делать ?
Вот соответствующий код для этого:
const MyInput = React.forwardRef((props,ref) => {
const [fontSize, setFontSize] = useState(12);
React.useImperativeHandle(ref,() => ({
incFont: () => {
setFontSize(fontSize => fontSize 2);
},
decFont: () => {
setFontSize(fontSize => fontSize-2);
}
}))
return(
<TextInput
value={props.value}
onChange={(e) => props.setValue(e.target.value)}
style={{ fontSize, borderColor: "red", borderWidth: 1 }}
>
</TextInput> )
})
Внутренняя основная функция:
const inputRef = useRef();
const [value, setValue] = useState("");
return(
<View>
<MyInput ref={inputRef} value={value} setValue={setValue}/>
<Text onPress={()=>inputRef.current.incFont()}>IncreaseFont</Text>
<Text onPress={() => inputRef.current.decFont()}>DecreaseFont</Text>
</View>)
Комментарии:
1. вы можете разместить песочницу? я не могу воспроизвести вашу проблему с образцом безопасной среды, который я создал
2. он работает в песочнице, но не в моем приложении… его сделал кто-то другой, codesandbox.io/s/distracted-burnell-0h70g?file=/src/App.js но это не работает для моего приложения, я не знаю, почему
3. e.target.value не работает на мобильных устройствах.. Это может быть причиной. Итак, TextInput не имеет значения, как его решить?
Ответ №1:
Теперь я решил эту проблему. Код на мой вопрос работает для Интернета, но не для мобильных устройств. e.target.value
не работает для мобильных устройств. И в событии changeText e уже дает значение, например (e)=>e
const MyInput = React.forwardRef((props,ref) => {
const [fontSize, setFontSize] = useState(12);
const [textInputValue, setTextInputValue] = React.useState('');
React.useImperativeHandle(ref,() => ({
incFont: () => {
setFontSize(fontSize => fontSize 2);
},
decFont: () => {
setFontSize(fontSize => fontSize-2);
}
}))
return(
<TextInput
onChangeText={(text) => setTextInputValue(text)}
value={textInputValue}
style={{ fontSize, borderColor: "red", borderWidth: 1 }}
>
</TextInput> )
})
И я удалил значение,заданное значение в основной функции,
<MyInput ref={inputRef}/>
это работает идеально