如果我想制作一个包含表单的功能组件,例如要登录,并且我想在App组件中包含该状态,而Login是它的子级,我可以使用以下形式在App中更改状态吗?登录的孩子?
答案 0 :(得分:1)
是的。从data
向onChange
传递两个道具Login
和一个方法App
到data
。
Login
将在onChange
中设置表单的值。
如果Login
表单有任何更改,请使用更新后的表单值触发App
。
在Login
中处理它并更新其状态,然后其状态将以data
的形式向下流到{{1}}。
答案 1 :(得分:1)
要在子组件的父组件状态下修改属性,可以将功能作为Prop发送到子组件。
父组件:
class Parent extends React.Component {
// Parent state
this.state = {
someState: false
}
// This method will be sent to the child
handler = () => {
this.setState({ someState: true });
}
// Set the action property with the handler as value
render() {
return <Child action={this.handler} />
}
}
子组件:
// onClick executes the handler function set by the parent component
const Child = ({ action }) => (
<Button onClick={action} />
);
答案 2 :(得分:1)
是的,这是可能的。您只需要将一个prop传递给您的子组件。这是一个操作方法示例:
// in parent component
handleChange(updatedData) {
this.setstate({
data: updatedData
})
}
// in render method
<Login handleChange={this.handleChange}/>
// in child component
// calling the handleChange function
this.props.handleChange(newData)
答案 3 :(得分:1)
import React, {useState} from 'react';
function Submit() {
const [inputField , setInputField] = useState({
first_name: '',
last_name: '',
gmail: ''
})
const inputsHandler = (e) =>{
let value = { [e.target.name]: e.target.value } as any;
value = {
...inputField,
...value,
};
setInputField( {[e.target.name]: e.target.value} )
}
const submitButton = () =>{
alert(inputField.first_name)
}
return (
<div>
<input
type="text"
name="first_name"
onChange={inputsHandler}
placeholder="First Name"
value={inputField.first_name}/>
<br/>
<input
type="text"
name="last_name"
onChange={inputsHandler}
placeholder="First Name"
value={inputField.last_name}/>
<br/>
<input
type="gmail"
name="gmail"
onChange={inputsHandler}
placeholder="Gmail"
value={inputField.gmail}/>
<br/>
<button onClick={submitButton}>Submit Now</button>
</div>
)
}
export default Submit
答案 4 :(得分:1)
使用类似的东西
const payloadHandler = (e) => {
setPayload({ ...inputField, [e.target.name]: e.target.value });
};