如何使用反应钩子将数据从父级传递给子级

时间:2021-01-25 20:07:20

标签: javascript reactjs react-hooks react-component

我有一个简单的模态,在其中我有一个提交表单我现在显示错误我想将这些错误传递给子组件。

这里是一个简化的父组件

import React from 'react';
import Input from 'components/Functional/Input';

function Parent() {
    const [errors, setErrors] = useState([]);
    const handleSubmit = async e => {
            const formData = new FormData();
    }

    return (
        <Modal handleSubmit={handleSubmit}>
           <Input setErrors={errors} ></Input>
        </Modal>
    )
}

export default Parent

这是我的孩子组件

import React from 'react'

function Input({errors}) {
    const [field, setField] =useState('');

    console.log('errors', errors)
    return (
        <div>
            <input type="text"  onChange={e => setField(e.target.value)} />
        </div>
    )
}

export default Input

现在当我提交有错误的数据时,子组件中的 console.log('errors', errors) 我得到 undefined

这里出了什么问题?

2 个答案:

答案 0 :(得分:1)

注意道具名称。您正在从父组件传递一个名为 setErrors 的属性,而在子组件中您正在寻找 errors。尝试将属性从 setErrors 重命名为 errors 或简单地从 setErrors 组件中读取 <Input />

答案 1 :(得分:0)

您的输入组件中似乎有拼写错误。您设置了道具 setErrors,但您的组件需要 errors。如果您使用纯 javascript,则应使用 proptypes 以确保不会发生这种情况。

import React from 'react'
import PropTypes from 'prop-types'

function Input({errors}) {
    const [field, setField] =useState('');

    console.log('errors', errors)
    return (
        <div>
            <input type="text"  onChange={e => setField(e.target.value)} />
        </div>
    )
}

Input.propTypes = {
    errors: PropTypes.arrayOf(PropTypes.string)
};

export default Input

PropTypes