形式作为具有反应的功能成分

时间:2018-11-28 12:33:25

标签: reactjs forms login functional-programming components

如果我想制作一个包含表单的功能组件,例如要登录,并且我想在App组件中包含该状态,而Login是它的子级,我可以使用以下形式在App中更改状态吗?登录的孩子?

5 个答案:

答案 0 :(得分:1)

是的。从dataonChange传递两个道具Login和一个方法AppdataLogin将在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 });
};