react使用ant Desgin 的table组件动态设置columns

react使用ant Desgin 的table组件动态设置columns,然后会有按钮可以更改moduleId的值
 state = {
  moduleId: "1",//模块编号
}
columns = [
        {  // 当moduleId为7时不展示
            title: '缩略图',
            dataIndex: 'img',
            key: 'img',
            hideInTable:true,
            render: (_, record) => {
                return <img src={record.img} alt="" className={style.Abbreviate} style={{ width: 40, height: 40 }} />
            }
        },
        {  // 当moduleId为5时不展示
                title: '所属页面',
                dataIndex: 'description',
                key: 'description',
            },
        {
            title: '描述',
            dataIndex: 'description',
            key: 'description',
        },
]

我的解答思路和尝试过的方法
columns = [
        this.state.moduleId!=='7' && {  // 当moduleId为7时不展示
            title: '缩略图',
            dataIndex: 'img',
            key: 'img',
            hideInTable:true,
            render: (_, record) => {
                return <img src={record.img} alt="" className={style.Abbreviate} style={{ width: 40, height: 40 }} />
            }
        },
        {  // 当moduleId为5时不展示
                title: '所属页面',
                dataIndex: 'description',
                key: 'description',
            },
        {
            title: '描述',
            dataIndex: 'description',
            key: 'description',
        },
].filter(item => item !== false)
当我更改了moduleId,页面并没有变化,发现是因为columns 中使用到的this.state.moduleId一直没有变化,一直是初始值

你可以写个方法来获取columns,比如getColumns = () => {},在render里调用这个方法来获取列

  1. 不是filter的问题,filter(item => item !== false)可以优化为filter(Boolean)
  2. this.state.moduleId!=='7'也没有问题,你也设置moduleId: "7" 看是否展示缩略图这一项
  3. 若2没有问题,问题应该出在你setState后state的值没有更新,建议可以从这里入手
  let id = '7'

  const data = [
    {
      name: '小明',
      sex: '男',
      age: '12',
      class: '4年级1班'
    }
  ]

  const columns = [
    {
      title: '姓名',
      dataIndex: 'name'
    },
    id !== '7' && {
      title: '性别',
      dataIndex: 'sex'
    },
   {
      title: '年龄',
      dataIndex: 'age'
    },
    {
      title: '班级',
      dataIndex: 'class'
    }
  ].filter(Boolean)

img

if(id==7) columns=columns.filter((item)=>{return item.dataIndex! ="img"})