#javascript #html #reactjs #react-props
#javascript #HTML #reactjs #реагировать-props
Вопрос:
Существует форма ввода:
<input type="number" value={propsValue} onChange={changeValue} />
propsValue
получено в компоненте через props. Как changeValue
должна выглядеть функция, чтобы иметь возможность изменять значение в форме ввода?
Комментарии:
1. Вы используете функциональный компонент или компонент класса?
2. @JamesHamann функциональный компонент
3. вы можете обратиться к этому dmitripavlutin.com/react-forms-tutorial/#2-form-state . но в вашем случае установите значение propsValue в качестве значения состояния по умолчанию
Ответ №1:
Редактировать: понял, что я скопировал вставленный жесткий путь импорта кодов для служебной функции. Просто замените путь к вашей служебной функции.
Для функциональных компонентов может быть полезно использовать вспомогательную служебную функцию для сопоставления ваших входных данных с состоянием. Это настройка, которую я использую (она довольно простая). У меня есть useForm.js
файл, который экспортирует useForm
функцию:
import { useState } from 'react';
export default function useForm(defaults) {
const [values, setValues] = useState(defaults);
function updateValue(e) {
if (e.target.type === 'number') {
e.target.value = parseInt(e.target.value);
}
setValues({ ...values, [e.target.name]: e.target.value });
}
return { values, updateValue };
}
Затем, когда я хочу использовать форму a, я могу сделать это:
import useForm from '../utils/useForm';
export default function MyComponent(props) {
const { values, updateValue } = useForm({
name: props.inputValue1,
email: props.inputValue2
});
return (
<form>
<label htmlFor="name">
Name
<input
type="text"
name="name"
id="name"
value={values.name}
onChange={updateValue}
/>
</label>
<label htmlFor="email">
Email
<input
type="email"
name="email"
id="email"
value={values.email}
onChange={updateValue}
/>
</label>
</form>
)
}
Итак, вы видите, что я использую вспомогательную функцию для привязки входных данных к состоянию компонента. Вам нужно убедиться, что ваши входные имена соответствуют свойствам names, которые вы передаете при вызове useForm
в вашем компонентном файле.
Кстати, спасибо Уэсу Босу за эту функцию помощи.
Комментарии:
1. Я не понимаю, где находятся реквизиты, полученные в компоненте
2. Извините, вы правы, я пропустил эту часть. Поэтому, если вы передаете props своему компоненту, используйте значение props при вызове useForm . Я обновлю свой ответ
3. Просто измените свой код, чтобы использовать любые значения prop, с которых вы хотите начать ввод, и используйте значение по умолчанию для любого ввода, который не передается как prop
Ответ №2:
Что-то вроде этого.
// hooks
const {useState} = React;
function Input(props){
return <input type="number" value={props.value} onChange={() => props.onChange(event)} />
};
function App(){
const [value, setValue] = useState('');
function onChange(event){
setValue(event.target.value)
}
return (
<div>
<p>Value: {value}</p>
<Input value={value} onChange={onChange}/>
</div>
);
};
// Render
ReactDOM.render(
<App />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>