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

在React父组件中如何向子组件SenViewer传递数据并更新其状态?

实现方案

第一步:修复子组件的语法错误

你当前写的SenViewer是函数组件,存在以下明显语法问题:

  • 函数组件没有this上下文,不能使用this.setSen、this.state这类类组件专属的写法
  • 函数组件的第一个入参是props对象,不能直接拿到传入的data
  • 不能在组件顶层直接调用状态更新方法,会触发无限重渲染

第二步:调整子组件接收父组件传入的数据

两种可选实现方式,根据你的业务需求选择即可:

方案1:子组件不维护内部状态,直接使用父组件传入的props(更推荐,减少冗余状态)

const SenViewer = ({ sens }) => {
  return (
    <div>
      {sens.map((user) => (
        <Card className='text-center' key={user.id}>
          <Card.Header>
            Ticket: <p>Sen </p>
          </Card.Header>
          <Card.Body>
            <Card.Title>
              <p>Entire Audio</p>
            </Card.Title>
            <Card.Text>
              Magnitude:
              <p>{user.id}</p>
              Score
              <p>{user.total}</p>
            </Card.Text>
          </Card.Body>
          <Card.Footer className='text-muted'>
            <Button variant='primary'>TODO: smiley if good total</Button>
          </Card.Footer>
        </Card>
      ))}
    </div>
  );
};

方案2:子组件需要维护内部状态,监听props变化更新

如果子组件需要在内部修改数据不影响父组件,可以用这个方案:

import { useState, useEffect } from 'react';

const SenViewer = ({ sens: outerSens }) => {
  const [sen, setSen] = useState({
    sens: [],
  });
  // 监听父组件传入的sens变化,更新内部状态
  useEffect(() => {
    setSen({ sens: outerSens });
  }, [outerSens]);

  return (
    <div>
      {sen.sens.map((user) => (
        <Card className='text-center' key={user.id}>
          <Card.Header>
            Ticket: <p>Sen </p>
          </Card.Header>
          <Card.Body>
            <Card.Title>
              <p>Entire Audio</p>
            </Card.Title>
            <Card.Text>
              Magnitude:
              <p>{user.id}</p>
              Score
              <p>{user.total}</p>
            </Card.Text>
          </Card.Body>
          <Card.Footer className='text-muted'>
            <Button variant='primary'>TODO: smiley if good total</Button>
          </Card.Footer>
        </Card>
      ))}
    </div>
  );
};

第三步:父组件逻辑实现

父组件维护要传给子组件的数据,在指定函数执行完成后更新该数据即可:

import { useState } from 'react';

const Parent = () => {
  // 维护传给子组件的数据源
  const [senData, setSenData] = useState([]);

  // 你需要触发更新的函数,比如按钮点击事件
  const handleActionFinish = () => {
    // 这里替换为你自己的业务逻辑,执行完成后更新senData
    const newData = [
      {id: 1, total: 95},
      {id: 2, total: 88}
    ];
    // 更新数据后会自动同步给子组件
    setSenData(newData);
  };

  return (
    <div>
      <button onClick={handleActionFinish}>点击触发子组件更新</button>
      <SenViewer sens={senData} />
    </div>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:51:00