Reactjs 是否可以在REST上的Admin中的List/DataGrid中有条件列?
如果我在REST上的Admin中的Reactjs 是否可以在REST上的Admin中的List/DataGrid中有条件列?,reactjs,datagrid,admin-on-rest,Reactjs,Datagrid,Admin On Rest,如果我在REST上的Admin中的列表组件中应用过滤器,我只想在选择此特定过滤器后显示过滤列(TextField),因为过滤器是模糊的,我希望一眼就能看到不同的结果。但如果未设置过滤器,则应隐藏该列 到目前为止,我是这样实现的 const ConditionalFilterTextField = (props) => { const show = ... // if filter is set in URL return (show) ? <TextField {..
列表
组件中应用过滤器,我只想在选择此特定过滤器后显示过滤列(TextField
),因为过滤器是模糊的,我希望一眼就能看到不同的结果。但如果未设置过滤器,则应隐藏该列
到目前为止,我是这样实现的
const ConditionalFilterTextField = (props) => {
const show = ... // if filter is set in URL
return (show) ? <TextField {...props} /> : null
}
。。。
在App.js中
constmylist=(道具)=>{
const show=…//如果在URL中设置了筛选器
返回(
...
{show?:null}
...
);
}
感谢您的及时回复!我也尝试过这个,但是除非从初始页面加载开始,show
是true
,否则它不会显示列,即使show
最终变成true
。你能发布列表组件的完整代码吗?那么,如果我实现自己的列表组件,会有什么不同吗,正如你建议的那样?不,我不是这个意思,MyList
这里只是你的ItemList
的名字。为了回答这个问题,我得调查一下好的,谢谢你的努力!
<List {...props} filters={<MyFilter />}>
<Datagrid>
...
<ConditionalFilterTextField sortable={false} source="filter_field" label="My Label" />
...
</Datagrid>
</List>
class ItemList extends Component {
render() {
const props = this.props
// Find out if current filter is source of field.
const filter = props.itemsFilters
const showFieldA = (filter && filter.fieldA) ? true : false
return <List {...props} filters={<ItemsFilter />} perPage={50}>
<Datagrid>
<ReferenceField sortable={false} source="id" reference="items" linkType="show">
<TextField source="fieldB" />
</ReferenceField>
<TextField sortable={false} source="fieldC" />
<TextField sortable={false} source="fieldD" />
<DateField sortable={false} source="fieldE" />
{ (showFieldA === true) ? <TextField sortable={false} source="fieldA" /> : null }
<ShowButton />
<EditButton />
</Datagrid>
</List>
}
}
const ItemsFilter = (props) => (
<Filter {...props}>
<TextInput label="FilterSearch" source="q" />
<TextInput label="FilterA" source="fieldA" />
</Filter>
)
function mapStateToProps(state) {
return {
itemsFilters: state.admin.resources.items.list.params.filter
}
}
export default connect(mapStateToProps)(ItemList)
<Resource name="items" list={ItemList} show={ItemShow} edit={ItemEdit} />
const MyList = (props) => {
const show = ... // if filter is set in URL
return (
<List {...props} filters={<MyFilter />}>
<Datagrid>
...
{show ? <TextField {...props} /> : null}
...
</Datagrid>
</List>
);
}