antd Table(columns添加事件传参失效)columns在父组件,向子组件传参columns

23 篇文章 0 订阅
18 篇文章 0 订阅
本文描述了一个项目中关于在父组件中动态传参给子组件table的问题,涉及列配置更新后事件绑定失效。文章分析了原因,包括事件绑定未更新、列配置错误和状态数据不同步,并提供了相应的解决方案,如确保事件绑定更新、检查列配置正确性和同步状态数据。
摘要由CSDN通过智能技术生成

项目场景:

提示:这里简述项目相关背景:

将table封装成一个公共组件使用,columns在父组件内传参table子组件


问题描述

提示:这里描述项目中遇到的问题:

例如:数据传输过程中数据出现丢失的情况,无法传新数据
currentModule 想得到'AAA', 但得到了 ‘ ’空
APP 中接收数据代码:

@Override
  const columns1=[[{title:1},
  {title:2},
  {title:3,render: (text, record) => (
        <span
          className="controls-blue"
          onClick={() =>
            onDome({ data: record, currentModule: currentModule })
          }
        >
          详情
          <RightOutlined />
        </span>
      ),
    },},]
  const [subjectColumns, setSubjectColumns] = useState(columns);
  const [currentModule, setCurrentModule] = useState('');

  useEffect(() => {
    const interval = setTimeout(() => {
      setColumn()
    }, 10);
    return () => {
      clearTimeout(interval);
    };
  }, []);

  const setDomeCurrentModule=()=>{
  setCurrentModule('AAAA)
  }
  const onDome=(data)=>{
  console.log('获取传参',data.currentModule )  //返回 '' ,想得到'AAA'
}
  const setColumn=()=>{
   columns = _.cloneDeep(columns1);
   columns[1]['title']
   setSubjectColumns(columns)
}
return (
<div>
<ParentComponent columns={subjectColumns} />
</div>
)


原因分析:

提示:不生效分析分析:

1、事件绑定没有正确更新:如果你是通过某种事件绑定(如onClick)来处理点击事件,在更改列配置后没有相应地更新这些绑定,则点击事件可能不会触发
2、列配置错误:如果新的列配置没有正确设置事件处理函数,或者事件名称使用不当,也会导致点击事件无效。
3、状态或数据不同步:如果你的事件处理函数依赖于某些状态或数据,而这些状态或数据在列更改后没有正确更新,可能会导致事件处理函数不如预期工作。


解决方案:

提示:解决方案:

1、确保事件绑定是最新的:在更新column配置时,确保重新绑定所有需要的事件处理函数。

2、检查列配置:确认新的column配置中是否正确设置了事件处理函数,并且使用了正确的事件名称。

3、同步状态和数据:如果事件处理函数依赖于外部状态或数据,确保在列更改时这些数据也被更新

例如:新建一个 setColumn 函数,传参columns1,然后修改columns1后return返回columns

  const columns1=[[
  {title:1},
  {title:2},
  {title:3,render: (text, record) => (
        <span
          className="controls-blue"
          onClick={() =>
            onDome({ data: record, currentModule: currentModule })
          }
        >
          详情
          <RightOutlined />
        </span>
      ),
    },},]
  const [subjectColumns, setSubjectColumns] = useState(columns);
  const [currentModule, setCurrentModule] = useState('');
  const setDomeCurrentModule=()=>{
  setCurrentModule('AAAA)
  }
    const onDome=(data)=>{
  console.log('获取传参',data.currentModule )  //返回 '' ,想得到'AAA'
}
  const setColumn=(data)=>{
   columns = _.cloneDeep(columns1);
   columns[1]['title']
   setSubjectColumns(columns)
}
return (
<div>
<ParentComponent columns={setColumn(columns1)} />
</div>
)
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值