带有FunctionField的BooleanField更改为Boolean

问题描述 投票:1回答:2

我有疑问,我相信它将对其他开发人员有所帮助。我的API端有一个字段“ is_active”是布尔值,但它返回0或1,而不是TRUE或FALSE。我想用<FunctionField/>包装<BooleanField/>,但是没有用。有人可以帮忙。

这是我的代码:

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

该列仍为空白。

谢谢。

admin-on-rest
2个回答
3
投票

我认为您误解了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调用:

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

0
投票

这是我的解决方案:(您可以将其导入并代替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'} />
}
© www.soinside.com 2019 - 2024. All rights reserved.