You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React如何将Input组件的输入值传递给Home父组件?

解决React嵌套组件中获取子组件输入值的问题

要让Home组件实时获取Input的输入值,核心思路是状态提升——把输入状态从Input组件移到最顶层的Home组件,通过props将状态和更新方法逐层传递下去,具体修改如下:

修改Home.jsx

在Home中维护表单状态,并定义统一的输入处理函数,将状态和函数传给UserForm:

import React, { useState } from 'react';
import UserForm from '../components/UserForm';
import './Home.scss';

export default function Home() {
    // 维护表单的输入状态,区分不同输入框
    const [formData, setFormData] = useState({
        name: '',
        email: ''
    });

    // 统一处理输入变化,通过name属性区分不同输入框
    const handleInputChange = (e) => {
        const { name, value } = e.target;
        setFormData(prev => ({
            ...prev,
            [name]: value
        }));
    };

    // 这里可以实时打印输入值,验证是否获取成功
    console.log('当前输入值:', formData);

    return (
        <div className="home-container">
            <div className="card-container">
            </div>
            <div className="description-container">
                <div className="form-container">
                    {/* 将状态和处理函数传给UserForm */}
                    <UserForm formData={formData} handleInputChange={handleInputChange} />
                </div>
            </div>
        </div>
    )
}

修改UserForm.jsx

作为中间组件,接收Home传递的props,再转发给对应的Input组件,并给每个Input指定唯一的name属性:

import React from 'react';
import Input from './Input';

export default function UserForm(props) {
    return (
        <div className="user-form">
            <form>
                <Input
                    placeholder="Nome a ser impresso"
                    name="name"
                    value={props.formData.name}
                    onChange={props.handleInputChange} />
                <Input 
                    placeholder="E-mail" 
                    type="email"
                    name="email"
                    value={props.formData.email}
                    onChange={props.handleInputChange} />
            </form>
        </div>
    )
}

修改Input.jsx

移除自身的状态,完全使用父组件传递过来的value和onChange:

import React from 'react';
import './Input.scss';

export default function Input(props) {
    return (
        <div className="input-holder">
            <input
                type={props.type || 'text'}
                placeholder={props.placeholder}
                name={props.name}
                value={props.value}
                onChange={props.onChange}/>
        </div>
    )
}

原理说明

React遵循单向数据流,子组件的状态无法直接传递给父组件,通过状态提升把需要共享的状态放到共同的父组件(Home)中,子组件通过调用父组件传递的方法来更新状态,父组件状态更新后再把最新值传递给子组件,这样Home就能实时获取到所有输入框的内容了。

内容的提问来源于stack exchange,提问作者MrRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:35:23