输入不在SimpleForm中重新渲染

时间:2017-09-29 13:04:14

标签: javascript reactjs renderer admin-on-rest

我正在使用AOR 1.2.2进行网站设置面板。 棘手的部分是那些设置可以有不同的类型:string,int,bool,string数组,int等 我设法通过连接商店中的记录并使用此代码来实现此目的:

const SettingsEdit = (props) => {
  return (
    <Edit actions={<SettingsEditActions {...props} />} title=
      {<SettingsTitle />} {...props}>
      <SimpleForm toolbar={<EditToolbar />}>
        <TextField source="description" />
        <DisabledInput elStyle={{ width: '100%' }} label="Default 
         value" source="defaultValue" />
        {renderCountryValue(props)}
      </SimpleForm>
    </Edit>
  );
};




const renderCountryValue = (prop) => {
  const record = prop.record;
  if (record) {
    if (record.multilang) {
      // countryValue will be a dict with locale keys
      // TODO Multilang fields temporary disabled in restClient
      return null;
    }
    // countryValue will be single value or array
    if (record.schema.type === 'array') {
      // countryValue will be single array
      if (record.schema.items.type === 'string') {
        return <LongTextInput format={v => v.join()} parse={v => v.split(',')} label="Value" source="countryValue" />;
      }
      if (record.schema.items.type === 'integer') {
        return <LongTextInput format={v => v.join()} parse={v => v.split(',')} validate={validateIntegerArray} label="Value" source="countryValue" />;
      }
    }
    // countryValue will be single value
    if (record.schema.type === 'string') {
      return <TextInput label="Value" source="countryValue" />;
    }
    if (record.schema.type === 'integer') {
      return <NumberInput label="Value" source="countryValue" />;
    }
    if (record.schema.type === 'boolean') {
      return <BooleanInput label="Value" source="countryValue" />;
    }

    return <LongTextInput label="Value" source="countryValue" />;
  }
  return <TextInput label="Value" source="countryValue" />;
};

它运行良好,直到我尝试将AOR更新为1.3.1然后它停止了。 我注意到,在第一次渲染时没有记录,所以它渲染默认的TextInput,但在第二次渲染时,如果有记录,它不会将此输入重新渲染为正确的类型,如NumberInput等。 我尝试调试它,当它应该渲染其他输入但是在屏幕上没有任何事情发生时,程序就会出现。 任何想法或解决方法?

1 个答案:

答案 0 :(得分:0)

根据道具中的记录,我自己也遇到了一些问题。我通常然后设置值的手动检查,并在道具中找不到记录时返回null。