- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在页面中实现这个结构:
1.带有摘要的卡片(收入、用户等)
2. 谷歌地图 map
3.列表元素
列表元素内部有过滤。我在过滤列表时困惑于如何使用过滤选项来表示 map 和卡片中的过滤信息。
正如 @trixn 推荐的那样,我使用这个结构:
// app.js
<Admin restClient={jsonServerRestClient('http://jsonplaceholder.typicode.com')}>
<Resource name="posts" list={MyCustomPostList} /* other views */ />
</Admin>
// MyCustomPostList.js
class MyCustomPostList extends React.Component {
render() {
const {myOwnProp, ...otherProps} = this.props;
return (
<div>
// render your own components here
<AnyComponent myOwnProp={myOwnProp} />
<AGoogleMapsComponent />
// render the normal <List> component
<List {...otherProps}>
<Datagrid>
<TextField source="id" />
<TextField source="title" />
<TextField source="body" />
</Datagrid>
</List>
</div>
);
}
}
现在我无法将所需的数据发送到 map 和 AnyComponent。因此,我要么必须将相同的数据传递给 Maps 和 AnyComponent,要么以某种方式同步 List 组件中使用的过滤器。
我该如何实现这个目标?
最佳答案
Thank you! I would know how to connect new actions. But I am lost how to connect to already used actions to pass Filter options to Maps and AnyComponent, so I could show relevant information there, which should update its state after Filters are being triggered in List component.
您未连接到操作。您 dispatch 它们来改变 redux 存储的状态。完全理解 redux 的概念很重要,否则你将很难构建这种自定义应用程序。为了确保数据仅从上到下流动,组件只能监听存储的更改,而不能监听操作。
所以基本上你有两个选择:
<强>1。创建您自己的<List>
组件
引自admin-on-rest
文档:
Admin-on-rest was build with customization in mind. You can replace any admin-on-rest component with a component of your own, for instance to display a custom list layout, or a different edition form for a given resource.
如果您只想在 ListView 中显示其他元素,您可以将 <List>
括起来。组件而不是 <Resource>
成分。 <List>
组件接收 prop“data”中的实体和 prop“ids”中过滤后的 id。您可以使用它在您自己的组件中显示它。例如。如果您想管理位置列表并在列表组件内显示谷歌地图:
import React from 'react';
import { List } from 'admin-on-rest';
const LocationsList = props => (
// render your own components
<MyGoogleMapsComponent data={this.props.data} ids={this.props.ids}>
// render the admin-on-rest <List> component
<List {...props}>
// render the DataGrid
</List>
);
然后您可以将自定义列表传递给<Resource>
组件:
<Admin>
<Resource name="locations" list={LocationList} />
</Admin>
当您过滤列表中的位置时,更新后的查询将传递到您的 <LocationList>
并且它将使用新位置重新渲染。但请记住,这只会在管理页面的 ListView 中显示您的谷歌地图。
<强>2。将您的组件连接到 redux 存储。
仅当您需要组件时才执行此操作,例如谷歌地图,显示在 ListView 之外。这个要高级得多,因为您需要更多地了解 admin-on-rest
的内部结构。 。您必须将自定义组件连接到 redux 存储。您可以使用 connect()
来做到这一点函数来自 react-redux
封装:
// in MyGoogleMapsComponent.js
import React from 'react';
import { connect } from 'react-redux';
const LocationMap = ({locations}) => (
//render something based on the props
);
const mapStateToProps = (state, props) => {
// state.admin contains all the registered resources with their name as a key
const locationsResource = state.admin.locations;
// every resource has a "data" object with all entities mapped by id
const allLocations = locationsResource.data;
// every resource has a "list" object that has an array of ids of the currently filtered entities
const filteredIDs = locationsResource.list.ids;
return {
locations: filteredIDs.map(id => allLocations[id]),
};
};
// connect your component to the store
export default connect(mapStateToProps)(LocationsList)
mapStateToProps
是一个函数,它获取存储中的当前状态和组件的 Prop ,并返回一个包含要传递给组件的其他 Prop 的对象。
此方法还使用 admin-on-rest
实现的内部结构成分。您需要使用的一些 props 不是 api 的一部分,在最坏的情况下可能会突然改变,在这种情况下,如果您更新到 admin-on-rest
的新版本,您的应用程序可能不再工作。 。因此请记住,当发生重大更改时,您可能需要更新您的实现。
如果您只想访问过滤器本身,它们存储在 yourResourceName.list.params.filter
下的每个资源中以过滤器的名称作为键,以值作为值...
提示:如果您想了解 admin-on-rest
存储中的数据是如何存储的应用程序存储在现实生活中的示例中,安装 Redux DevTools对于 google chrome 并打开 admin-on-rest demo 。然后,您可以打开检查栏,然后会出现一个新选项卡 redux,您可以在其中查看 redux 存储的内容以及与应用程序交互时调度的所有操作。这样你会更容易理解如何admin-on-rest
有效。
关于javascript - Admin-on-rest - 如何将其他组件与从列表中过滤的查询同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888695/
我正在实现 IMAP 客户端,但 IMAP 邮箱同步出现问题。 首先,可以从 IMAP 服务器获取新邮件,但我不知道如何从邮箱中查找已删除的邮件。 我是否应该从服务器获取所有消息并将其与本地数据进行比
我研究线程同步。当我有这个例子时: class A { public synchronized void methodA(){ } public synchronized void met
嗨,我做了一个扩展线程的东西,它添加了一个包含 IP 的对象。然后我创建了该线程的两个实例并启动它们。他们使用相同的列表。 我现在想使用 Synchronized 来阻止并发更新问题。但它不起作用,我
我正在尝试使用 FTP 定期将小数据文件从程序上传到服务器。用户从使用 javascript XMLHttpRequest 函数读取数据的网页访问数据。这一切似乎都有效,但我正在努力解决由 FTP 和
我不知道如何同步下一个代码: javascript: (function() { var s2 = document.createElement('script'); s2.src =
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
一 点睛 1 Message 在基于 Message 的系统中,每一个 Event 也可以被称为 Message,Message 是对 Event 更高一个层级的抽象,每一个 Message 都有一个
一 点睛 1 Message 在基于 Message 的系统中,每一个 Event 也可以被称为 Message,Message 是对 Event 更高一个层级的抽象,每一个 Message 都有一个
目标:我所追求的是每次在数据库中添加某些内容时(在 $.ajax 到 Submit_to_db.php 之后),从数据库获取数据并刷新 main.php(通过 draw_polygon 更明显)。 所
我有一个重复动画,需要与其他一些 transient 动画同步。重复动画是一条在屏幕上移动 4 秒的扫描线。当它经过下面的图像时,这些图像需要“闪烁”。 闪烁的图像可以根据用户的意愿来来去去和移动。它
我有 b 个块,每个块有 t 个线程。 我可以用 __syncthreads() 同步特定块中的线程。例如 __global__ void aFunction() { for(i=0;i #
我正在使用azure表查询来检索分配给用户的所有错误实体。 此外,我更改了实体的属性以声明该实体处于处理模式。 处理完实体后,我将从表中删除该实体。 当我进行并行测试时,可能会发生查询期间,一个实体已
我想知道 SQLite 是如何实现它的。它基于文件锁定吗?当然,并不是每个访问它的用户都锁定了整个数据库;那效率极低。它是基于多个文件还是仅基于一个大文件? 如果有人能够简要概述一下 sqlite 中
我想post到php,当id EmpAgree1时,然后它的post变量EmpAgree=1;当id为EmpAgree2时,则后置变量EmpAgree=2等。但只是读取i的最后一个值,为什么?以及如何
CUBLAS 文档提到我们在读取标量结果之前需要同步: “此外,少数返回标量结果的函数,例如 amax()、amin、asum()、rotg()、rotmg()、dot() 和 nrm2(),通过引用
我知道下面的代码中缺少一些内容,我的问题是关于 RemoteImplementation 中的同步机制。我还了解到该网站和其他网站上有几个关于 RMI 和同步的问题;我在这里寻找明确的确认/矛盾。 我
我不太确定如何解决这个问题......所以我可能需要几次尝试才能正确回答这个问题。我有一个用于缓存方法结果的注释。我的代码目前是一个私有(private)分支,但我正在处理的部分从这里开始: http
我对 Java 非常失望,因为它不允许以下代码尽可能地并发移动。当没有同步时,两个线程会更频繁地切换,但是当尝试访问同步方法时,在第二个线程获得锁之前以及在第一个线程获得锁之前再次花费太长时间(比如
过去几周我一直在研究java多线程。我了解了synchronized,并理解synchronized避免了多个线程同时访问相同的属性。我编写此代码是为了在同一线程中运行两个线程。 val gate =
我有一个关于 Java 同步的简单问题。 请假设以下代码: public class Test { private String address; private int age;
我是一名优秀的程序员,十分优秀!