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

React父组件向子组件传递变量Prop失败问题排查

问题解决:React父子组件Props更新不生效

问题根源

你用let声明的普通变量rowIdToSend,React不会追踪它的变化。当你在handleSingleRowSelection里修改这个变量时,组件不会重新渲染,子组件Child接收的rowsToModify还是旧值,所以读取不到预期的ID。

修复后的父组件代码

import { useState } from 'react';

const SalesTable = () => {
  // 用useState声明状态变量,替代普通let变量
  const [rowIdToSend, setRowIdToSend] = useState([]);

  const handleSingleRowSelection = (event, id) => {
    if (event.target.checked) {
      // 用setter函数更新状态,触发组件重渲染
      setRowIdToSend(id);
      console.log("selected rows", id);
    } else {
      // 取消选中时清空状态
      setRowIdToSend([]);
      console.log("selected rows", []);
    }
  };

  return (
    <Child rowsToModify={{ greeting: rowIdToSend }} />
  );
};

子组件代码(无需修改)

const Child = ({ rowsToModify }) => {
  const unknown = rowsToModify;

  const displaymylog = () => {
    console.log('received');
    console.log(unknown.greeting);
  };

  return (
    <div className="buttonGroup">
      <button onClick={displaymylog}>Update</button>
      <button>Delete</button>
    </div>
  );
};

export default Child;

关键说明

  • React函数组件中,只有状态变量(useState/useReducer)或props变化才会触发组件重新渲染,普通变量的修改不会触发更新。
  • 必须使用setRowIdToSend这类状态更新函数来修改状态,直接赋值普通变量对React的渲染机制无效。
  • 原代码里未声明的selectedRows变量已替换为正确的状态清空逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:23:22