如何设置状态输入的值(React 应用程序)
how to set the value of Input from state ( React app)
希望你一切顺利!
我希望根据我从 props 收到的状态来设置 Input 的值!我可以在占位符中设置来自“配置文件”状态的所有信息,但是当把它放在值字段中时它不显示任何内容
这是我的代码和我使用的表格:
<Form
name="basic"
wrapperCol={{ span: 24 }}
onFinish={onUpdate}
onFinishFailed={onFinishFailed}>
<FormItem>
<Input prefix={<ContactsTwoTone />} placeholder={profile.name} />
</FormItem>
<FormItem name="email"
rules={[
{
type: 'email',
message: 'The input is not valid E-mail!',
}
]}
>
<Input value={profile.email} name="name" prefix={<MailTwoTone />} placeholder={profile} />
</FormItem>
<FormItem name="mobile" value={profile.mobile} >
<Input value={profile.mobile} name="mobile" prefix={<PhoneTwoTone />} placeholder={profile.mobile} />
</FormItem>
<FormItem name="addres">
<Input name="addres" prefix={<HomeTwoTone />} placeholder={profile.addres} />
</FormItem>
<FormItem name="description">
<Input.TextArea name="description" placeholder="description" rows={4} prefix={<ContainerTwoTone />} />
</FormItem>
<FormItem>
<Button className="width-100" type="primary" htmlType="submit" onClick={onUpdate} >Update</Button>
</FormItem>
</Form> ```
the useEffect function and the declaration of state :
const [visible, setVisible] = useState(false);
const FormItem = Form.Item;
const [profile, setProfile] = useState({});
useEffect(() => {
setProfile(props.profile);
},[props.profile] );
const showDrawer = () => {
setVisible(true);
};
尝试将他们注销,看看他们是否在做他们应该做的事情。
const SomeInput = (props) => {
const { name, placeholder, value } = props;
console.log(`${name} placeholder: ${placeholder} value: ${value}`);
return(
<input placeholder={placeholder} value={value}/>
);
};
const App = () => {
const [state,setState] = React.useState('foo');
console.log(`App state: ${state}`);
return(
<div>
<SomeInput name={'input1'} placeholder={state}/>
<SomeInput name={'input2'} value={state}/>
</div>
);
};
ReactDOM.render(<App/>,document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"/>
I am looking to set the value of Input from the state that i receive
from props!
如果您只是想设置来自状态的输入,这里有一个简单的例子。
https://codesandbox.io/s/trusting-swanson-1q0ftq?file=/src/App.js
import { useState } from 'react';
const initialValue = 'John';
const App = () => {
const [name, setName] = useState(initialValue);
console.log('render');
console.log('state: ', name);
const handleChange = (event) => {
const value = event.target.value;
setName(value);
};
return (
<div>
<h2>Form</h2>
<form>
<input type='text' onChange={handleChange} value={name} />
</form>
</div>
);
};
export default App;
关于你关于道具的其余问题,根据你的例子,看起来你可能认为道具应该通知一些新的状态。您的示例代码试图在您的 useEffect
中保留一些来自道具的新状态。 props 的变化总是会触发 re-render,所以你似乎真的在问如何将 props 传递到你的表单中。
下面是一个配置文件使用状态保持值的示例。这些值可以作为道具发送到另一个组件,如您的表单。配置文件字段的值将依赖于状态。表单组件将依赖基于该状态的道具。
您可以在配置文件字段中键入内容以查看表单值是如何通过 props 更新的。在顶部表单中输入不会更新值,因为这些是 read-only 和“从道具设置”。
您可能不需要 read-only 表单,但这是基于您的示例。您可以将个人资料数据作为道具传递给任何需要它的组件。我认为我希望在这里传达的想法是为您的个人资料数据(您的状态)考虑一个“单一事实来源”,并决定您希望它存在于何处以及其他组件需要访问它。
希望对您有所帮助。
https://codesandbox.io/s/damp-fire-sbxmoz?file=/src/App.js
import { useState } from 'react';
const initialProfile = {
firstName: 'John',
lastName: 'Doe',
};
const Form = ({ firstName, lastName }) => (
<div>
<h2>Form</h2>
<form>
<input
label='First Name'
type='text'
name='firstName'
value={firstName}
/>
<input
label='Last Name'
type='text'
name='lastName'
value={lastName}
/>
</form>
</div>
);
const App = () => {
const [profileFields, setProfileFields] = useState(initialProfile);
const { firstName, lastName } = profileFields;
console.log('render, profile fields: ', profileFields);
const handleChange = (event) => {
const { name, value } = event.target;
setProfileFields(() => {
return {
...profileFields,
[name]: value,
};
});
};
return (
<div>
<Form firstName={firstName} lastName={lastName} />
<h2>Profile</h2>
<form>
<input
label='First Name'
type='text'
onChange={handleChange}
name='firstName'
value={firstName}
/>
<input
label='Last Name'
type='text'
onChange={handleChange}
name='lastName'
value={lastName}
/>
</form>
</div>
);
};
export default App;
希望你一切顺利! 我希望根据我从 props 收到的状态来设置 Input 的值!我可以在占位符中设置来自“配置文件”状态的所有信息,但是当把它放在值字段中时它不显示任何内容 这是我的代码和我使用的表格:
<Form
name="basic"
wrapperCol={{ span: 24 }}
onFinish={onUpdate}
onFinishFailed={onFinishFailed}>
<FormItem>
<Input prefix={<ContactsTwoTone />} placeholder={profile.name} />
</FormItem>
<FormItem name="email"
rules={[
{
type: 'email',
message: 'The input is not valid E-mail!',
}
]}
>
<Input value={profile.email} name="name" prefix={<MailTwoTone />} placeholder={profile} />
</FormItem>
<FormItem name="mobile" value={profile.mobile} >
<Input value={profile.mobile} name="mobile" prefix={<PhoneTwoTone />} placeholder={profile.mobile} />
</FormItem>
<FormItem name="addres">
<Input name="addres" prefix={<HomeTwoTone />} placeholder={profile.addres} />
</FormItem>
<FormItem name="description">
<Input.TextArea name="description" placeholder="description" rows={4} prefix={<ContainerTwoTone />} />
</FormItem>
<FormItem>
<Button className="width-100" type="primary" htmlType="submit" onClick={onUpdate} >Update</Button>
</FormItem>
</Form> ```
the useEffect function and the declaration of state :
const [visible, setVisible] = useState(false);
const FormItem = Form.Item;
const [profile, setProfile] = useState({});
useEffect(() => {
setProfile(props.profile);
},[props.profile] );
const showDrawer = () => {
setVisible(true);
};
尝试将他们注销,看看他们是否在做他们应该做的事情。
const SomeInput = (props) => {
const { name, placeholder, value } = props;
console.log(`${name} placeholder: ${placeholder} value: ${value}`);
return(
<input placeholder={placeholder} value={value}/>
);
};
const App = () => {
const [state,setState] = React.useState('foo');
console.log(`App state: ${state}`);
return(
<div>
<SomeInput name={'input1'} placeholder={state}/>
<SomeInput name={'input2'} value={state}/>
</div>
);
};
ReactDOM.render(<App/>,document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"/>
I am looking to set the value of Input from the state that i receive from props!
如果您只是想设置来自状态的输入,这里有一个简单的例子。
https://codesandbox.io/s/trusting-swanson-1q0ftq?file=/src/App.js
import { useState } from 'react';
const initialValue = 'John';
const App = () => {
const [name, setName] = useState(initialValue);
console.log('render');
console.log('state: ', name);
const handleChange = (event) => {
const value = event.target.value;
setName(value);
};
return (
<div>
<h2>Form</h2>
<form>
<input type='text' onChange={handleChange} value={name} />
</form>
</div>
);
};
export default App;
关于你关于道具的其余问题,根据你的例子,看起来你可能认为道具应该通知一些新的状态。您的示例代码试图在您的 useEffect
中保留一些来自道具的新状态。 props 的变化总是会触发 re-render,所以你似乎真的在问如何将 props 传递到你的表单中。
下面是一个配置文件使用状态保持值的示例。这些值可以作为道具发送到另一个组件,如您的表单。配置文件字段的值将依赖于状态。表单组件将依赖基于该状态的道具。
您可以在配置文件字段中键入内容以查看表单值是如何通过 props 更新的。在顶部表单中输入不会更新值,因为这些是 read-only 和“从道具设置”。
您可能不需要 read-only 表单,但这是基于您的示例。您可以将个人资料数据作为道具传递给任何需要它的组件。我认为我希望在这里传达的想法是为您的个人资料数据(您的状态)考虑一个“单一事实来源”,并决定您希望它存在于何处以及其他组件需要访问它。
希望对您有所帮助。
https://codesandbox.io/s/damp-fire-sbxmoz?file=/src/App.js
import { useState } from 'react';
const initialProfile = {
firstName: 'John',
lastName: 'Doe',
};
const Form = ({ firstName, lastName }) => (
<div>
<h2>Form</h2>
<form>
<input
label='First Name'
type='text'
name='firstName'
value={firstName}
/>
<input
label='Last Name'
type='text'
name='lastName'
value={lastName}
/>
</form>
</div>
);
const App = () => {
const [profileFields, setProfileFields] = useState(initialProfile);
const { firstName, lastName } = profileFields;
console.log('render, profile fields: ', profileFields);
const handleChange = (event) => {
const { name, value } = event.target;
setProfileFields(() => {
return {
...profileFields,
[name]: value,
};
});
};
return (
<div>
<Form firstName={firstName} lastName={lastName} />
<h2>Profile</h2>
<form>
<input
label='First Name'
type='text'
onChange={handleChange}
name='firstName'
value={firstName}
/>
<input
label='Last Name'
type='text'
onChange={handleChange}
name='lastName'
value={lastName}
/>
</form>
</div>
);
};
export default App;