项目场景:
提示:这里简述项目相关背景:
将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>
)