antd

antd table 行点击事件以及高亮显示选中行的背景颜色

.ant-table-tbody > tr.ant-table-row-selected td{ background-color: #e6f7ff; }

table:点击行即点击checkbox

https://codesandbox.io/s/000vqw38rl?file=/index.js:876-1052

修改高亮后变白

首先选中

style中显示css 变化

直接抄下修改

如果找不到,直接在发生变化的组件上找

antd Table:要注意

这里是分别控制 分别是点击行 和 点击checkbox 同时用钩子控制checkbox, redux传值到 batch-action 这里必须多重控制


  const [selectedRowKeys, setSelectedRowKeys] = useState([]);


  const onSelectChange = (selectedRowKeys: any) => {//传入antd checkbox 返回的所有选中的key
    console.log('selectedRowKeys changed: ', selectedRowKeys);
    setSelectedRowKeys(selectedRowKeys);
    dispatch({//control toolbar----batch action button, 这里必须多重控制
      type: `${spaceName}/setSelectedRowKeys`,
      selectedRowKeys,
    });//这里是分别控制 分别是点击行 和 点击checkbox 同时用钩子控制checkbox, redux传值到 batch-action 这里必须多重控制
  };

  const handleSingleDelete = (selectedArray: any) => {//这里的参数是一个id数组,删除一个,为的是batch——delete
    const dishId = selectedArray[0];//取到唯一一个 即第一个
    dispatch({
      type: `${spaceName}/deleteDish`,
      dishId,
      currentPage,
      pageSizae
    })
  }

  

  const rowSelection = {//选中checkbox 需要注意虽然点击行也可以选中(关联),也要和onselectchange关联
    selectedRowKeys,//这里是usestate数组,antd给它返回一个数组,即所有选中的checkbox key
    onChange: onSelectChange,
  };

  const onRow = (record: any) => ({//当点击到行
    onClick: () => {
      selectRow(record);
    }
  })

  const selectRow = (record: any) => {//if row already selected then unhighlight row, pass to toolbar show batch action
    const selectRows = [...selectedRowKeys];
    console.log('selectedRowKeys changed: ', selectedRowKeys);
    const key = record.key as never;
    selectRows.indexOf(key) >= 0 ? selectRows.splice(selectRows.indexOf(key), 1) : selectRows.push(key)

    dispatch({
      type: `${spaceName}/setSelectedRowKeys`,
      selectedRowKeys: selectRows,
    });
    setSelectedRowKeys(selectRows);//这里是分别控制 分别是点击行 和 点击checkbox 同时用钩子控制checkbox, redux传值到 batch-action 这里必须多重控制
  }

  return (
    <div className={styles.listViewTableContainer}>
      <Table
        rowSelection={rowSelection}
        columns={columnData}
        dataSource={rowsdata}
        scroll={{ x: 900, y: 600 }}
        pagination={false}
        onRow={(record) => onRow(record)}
      />
    </div>
  );

};

export default connect(getMapStateToProps(['meta', 'od', 'loading', spaceName]))(ListViewTable);

 两个TimePicker 范围

父组件

<Form.Item label="t_Valid.Period">
              {getFieldDecorator('valid_period', {
                initialValue: { firstPicker: firstPicker ? firstPicker : moment('12:08:23', 'HH:mm:ss'), secondPicker: secondPicker ? secondPicker : moment('12:10:23', 'HH:mm:ss') }
              })(<TimePeriodInput />)}
            </Form.Item>

子组件

const TimePeriodInput: React.FC<any> = (props: any) => {
  const {
    onChange, value //这两个属性是 经过 getFieldDecorator 包装的控件,表单控件会自动添加 value(或 valuePropName 指定的其他属性) onChange
  } = props;

  const valueChange = (changedValue: any) => { //此方法用来控制value中的两个对象
if (onChange) {
      onChange({
        ...value,
        ...changedValue,
      });
    }
  }

  const firstPickerChange = (time, timeString: any) => {
    console.log(timeString);
    valueChange({ firstPicker: timeString })
  }

  const secondPickerChange = (time, timeString: any) => {
    console.log(timeString);
    valueChange({ secondPicker: timeString })
  }

  return (
    <div>
      <TimePicker onChange={firstPickerChange} placeholder={'start time'} />
      <Icon type="swap-right" />
      <TimePicker onChange={secondPickerChange} placeholder={'start time'} />
    </div>
  );
};

 

 这种要全写在global里

    :global {
      form textarea.ant-input {
        width: 158px;
      }
    }

原文地址:https://www.cnblogs.com/cschen588/p/13341833.html