【问题标题】:How to use custom 'editComponent' in material-table?如何在材质表中使用自定义“editComponent”?
【发布时间】:2019-10-27 19:11:06
【问题描述】:

我正在尝试在我的项目中使用“材料表”。我的“图标”列包含图标名称。我需要通过从外部对话框中选择它来更改此图标。 我在从外部对话框更新表数据时遇到问题。当我使用“输入”元素并更改图标名称时,它可以正常工作。

editComponent: props => (
  <input
    type="text"
    value={props.value}
    onChange={e => props.onChange(e.target.value)}
  />
)

我不知道,如何通过我的对话实现此结果。 我创建了以下片段项目以详细显示我需要的内容:https://codesandbox.io/embed/gifted-liskov-ih72m

当我通过文本更改图标名称并保存更改时 - 可以。更改已保存。 当我通过从外部对话框中选择图标并保存更改来更改图标时 - 它不起作用。

editComponent: props => (
  <SelectIconDialog
    value={props.value}
    onChange={e => props.onChange(e.target.value)}
  />
)

我不知道,如何调用“SelectIconDilog”中的道具给出的“onChange”。

export default function SelectIconDialog(props) {
    const { value, onChange } = props;
    const [open, setOpen] = React.useState(false);
    const [selectedValue, setSelectedValue] = React.useState(value);

    function handleClickOpen() {
        setOpen(true);
    }

    const handleClose = value => {
        setOpen(false);
        setSelectedValue(value);
        //onChange(value); // it doesn't work
    };

    return (
        <div>
            <Tooltip title={selectedValue}>
                <IconButton
                    onClick={handleClickOpen}
                    color="default"
                >
                    <DynamicIcon 
                        iconName={selectedValue} 
                        // onChange={onChange} // it doesn't work
                    />
                </IconButton>
            </Tooltip>
            <SimpleDialog selectedValue={selectedValue} open={open} onClose={handleClose} />
        </div>
    );
}

【问题讨论】:

    标签: javascript reactjs material-ui material-table


    【解决方案1】:

    SelectIconDialog 中使用onChange={e =&gt; props.onChange(e)},因为e 是图标名称,您希望将其分配给您的input

      const [state, setState] = React.useState({
        columns: [
          {
           ...
            editComponent: props => (
              <SelectIconDialog value={props.value} onChange={props.onChange} />
            )
          },
          ...
    }
    

    此外,在SimpleDialog 中,您收到错误,因为您没有为您的iconNames 分配唯一键,请尝试:

      <div>
        {iconsNames.map((iName, key) => (
          <Tooltip title={iName} key={key}>
            <IconButton onClick={() => handleItemClick(iName)}>
              <DynamicIcon iconName={iName} />
            </IconButton>
          </Tooltip>
        ))}
      </div>;
    

    演示:

    【讨论】:

      【解决方案2】:
        title: "title",
        field: 'fieldname',
        render: rowData => <span>{findStock(rowData.fieldname)}</span>,
        editComponent: props =>
          <Select
            value={{ value: props.value, label: findStock(props.value) }}
            onChange={e => props.onChange(e.value)}
            name='fieldname'
            autoFocus
            textFieldProps={{
              label: "fieldname" ,
              InputLabelProps: {
                shrink: true,
              },
              variant: 'outlined',
            }}
            options={stocks.map((item) => ({
              value: item.id,
              label: item.name,
            }))}
           />
      

      【讨论】:

      猜你喜欢
      • 2017-06-16
      • 2020-09-20
      • 1970-01-01
      • 2016-04-30
      • 2022-01-18
      • 2021-11-05
      • 2019-09-05
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多