带有FunctionField的BooleanField将number更改为Boolean

时间:2018-01-27 20:48:16

标签: admin-on-rest

我有疑问,我相信它会对其他开发者有所帮助。 我有字段&#34; is_active&#34;在我的API端是布尔值,但它返回0或1而不是TRUE或FALSE。 我想使用<FunctionField/>来包装<BooleanField/>,但它没有用。有人可以帮忙。

这是我的代码:

<FunctionField source="is_active" label="is_active" render={(record) => record.is_active ? true : false}>
  <BooleanField/>
</FunctionField>

该列仍为空白。

感谢。

2 个答案:

答案 0 :(得分:2)

我认为您误解了FunctionField组件。它呈现render道具的结果。你想要达到的目标是:

<FunctionField source="is_active" label="is_active" render={(record,source) => 
    <BooleanField record={{...record,is_active:!!record.is_active}} source={source}/>}/>

但这不是很好。更好的是包装你的dataProvider/restClient并确保数据是布尔值。

// In FixMyDataFeature.js
export default restClient => (type, resource, params) => restClient(type,resource,params).then(response=>
   if(resource === 'Resource_with_numeric_is_active_field`){
      return {
         data: mutateIsActiveFieldToBoolean(response.data)
      }
   }
   else{
      return response;
   }
);

并与管理员联系:

<Admin dataProvider={FixMyDataFeature(dataProvider)}... />

答案 1 :(得分:1)

这是我的解决方案:(您可以将其导入并使用它代替BooleanField)

import React from 'react';
import { BooleanField } from "react-admin";

export const BooleanNumField = ({ record = {}, source}) => {
  let theRecord = {...record};

  theRecord[source + 'Num'] = !!parseInt(record[source]);

  return <BooleanField record={theRecord} source={source + 'Num'} />
}