在节点(使用 ejs)中,我通常可以去:
res.render('home', {
data: someData
});
Run Code Online (Sandbox Code Playgroud)
这在反应中仍然可能吗?我不想为我的所有数据进行客户端加载(通过 .ajax),而是加载一些初始数据并将其传递给反应(或通量)。我一直无法找到任何这方面的例子。
我发现当数组中的元素发生更改时, React不会更新组件。相反,必须克隆一个新数组并将其放置在其位置。
例如,我有一个_suggestedPeople. 当单击代表这些人之一的 UI 元素时,我想通过调用 来注册它selectPerson。
我希望 React 在执行此操作后能够更新:
selectPerson: function(personID, selected) {
var person = _.find(_suggestedPeople, {id: personID});
if (person) {
person.selected = selected;
}
return person;
},
Run Code Online (Sandbox Code Playgroud)
然而,我最终还是这样做了,这似乎没有必要:
selectPerson: function(personID, selected) {
var index = _.findIndex(_suggestedPeople, {id: personID});
var found = index !== -1;
if (found) {
var people = _.cloneDeep(_suggestedPeople);
people[index].selected = selected;
_suggestedPeople = people;
}
return found;
},
Run Code Online (Sandbox Code Playgroud)
后者是更新 React 组件数组数据的正确方法吗?或者我错过了什么?
我已经开始通过flummox、react-bootstrap和react-router玩react。我正在尝试为我的网站创建一个基本的同构 CMS。
语境 :
在身份验证方面,每个用户都有一个功能列表,每个组件都使用我的身份验证存储“可以”显示或不显示的方法等......
我在顶部有一个用户导航栏,在 reat-router 处理的每个页面上都可见,带有一个登录/退出按钮,如果用户未登录,则基本上会在单击带有登录表单的模态时显示,否则会显示注销确认。
当用户登录时,我希望更新当前显示的页面上的组件(注销相同)。
这是一个页面示例,该页面显示一个列表,该列表只能由具有适当权限的经过身份验证的用户查看:
过程 :
问题:无法在调度过程中调度
Hack :第二个动作放在 setTimeout 中
问题: 我阅读了很多关于这个特定问题的答案,据说在同一个调度程序周期内调用两个操作是糟糕的设计。所以我的问题是:有没有更好的方法来设计这个过程?
PS:如有必要,我可以发布一些代码。
严格从后端角度来看,如何实现 Flux 架构?需要明确的是,MVC 设计模式实际上很清楚如何安排文件,框架有自己的实现,但仍然清楚如何安排和组织项目。根据 Flux 架构,我应该如何构建我的项目代码?另外,是否有任何适用于 Flux 架构的开源框架,例如适用于 MVC 的 codeignighter?
在我读过的关于 Facebook Flux 架构的所有文章和教程中,它们都是使用 Nodejs 进行演示的后端,前端通常是 ReactJS(我也读过一篇使用 AngularJS 的文章)。但他们都专注于前端视角。
我从来都不是 MVC 的粉丝,自从我发现 Micro-frameworks 以来,我就使用了我自己版本的 Modal-View 设计模式(与精简的 Flux 模式惊人地相似)。但我一直对如何构建它感到模糊。
Facebook 关于 Flux 模式的帖子解释了很多有关速度和安全性的内容。但所有教程都只关注 ReactJS。来自 Pluralsight、egghead 和我去年遇到的所有其他教程都使用 NodeJS 后端。其中 99% 并没有真正演示 Flux 架构,而是展示了如何使用 ReactJS。因此,经过近一年的搜索,我仍然不清楚通量到底是什么。
我正在使用 React 和 Flux 构建一个应用程序。单击项目列表会启动一个操作,然后使用该操作启动(通过效果)AJAX 请求axios(尽管我尝试过superagent-bluebird-promise得到相同的结果)。
问题是,使用 Google Chrome 时,首次发出此请求时,单击列表中的项目与发起 AJAX 请求之间存在大约两秒的延迟。后续点击将立即开始加载请求。
使用 Firefox,所有请求都是即时的。
编辑:我已经在两台 Ubuntu PC 上进行了测试,并且可以复制相同的症状。我还可以在 Android 上复制这些症状,但延迟较长(大约 4 秒)。
这是在 Chrome 下制作的配置文件的屏幕截图:
这是 Chrome 的错误还是什么?
这不是 React 特定的问题。我正在考虑在 Aurelia/Angularjs 中实现 Flux。
在阅读通量时,我不相信调度员步骤的必要性。为什么组件不能直接调用 store 来更新和检索数据?这种方法有什么问题吗?
例如:如果我有一个CarStore可以创建新车、更新汽车并获取汽车列表(只是 CRUD api 上的一个薄层),我应该能够通过直接从car-grid组件调用商店来检索/更新列表. 由于 store 是单例,每当列表更新时,car-grid应该自动获取新项目。在这种情况下使用调度程序有什么好处?
我一直在阅读 Redux,它解决了很多问题。但本质上,它只是一个中央“真实”存储。
直觉上,尽管我发现状态仍然通过道具或上下文传递的事实并不优雅。
除了磁盘 i/o 速度,为什么不使用本地 cookie 存储作为中央数据存储?这将消除通过组件传递数据的需要。
我看到的唯一挑战是数据安全,但这并不是所有应用程序的问题。
根据戴夫的评论进行详细说明。我的实际问题更多是关于拥有一个中央 Redux 风格商店的可能性,而无需通过道具或上下文主动传递状态。饼干似乎是一个有趣的探索途径。
快进几年的经验:
react-redux-persist),但您不会在性能方面依赖它我有一个 Web 服务,我正在尝试使用新的 Spring 5 WebClient 来使用它。
\n\n# GET /orders/\n[\n { orderId: 1, ...\xc2\xa0},\n { orderId: 1, ...\xc2\xa0}\n]\nRun Code Online (Sandbox Code Playgroud)\n\n以及调用的java代码
\n\n// Java\nFlux<Order> ordersStream = webClient.get()\n .uri("/orders/")\n .exchange()\n .flatMap(response -> response.bodyToFlux(Order.class));\nRun Code Online (Sandbox Code Playgroud)\n\n来自 Web 服务的响应是分页的,因此不直接包含项目列表,如上例所示。
\n\n看起来像这样
\n\n# GET /orders/\n{\n "error": null,\n "metadata": {\n "total": 998,\n "limit": 1000,\n "offset": 0\n },\n "data": [\n { orderId: 1, ... },\n { orderId: 2, ... },\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我怎样才能获得子"data"密钥Flux<Order>?
创建一个包装类并转换包装器 …
我正在 Angular/NGRX 中开发 Flux 应用程序。与我一起工作的一位实习生说,他在他的第一个应用程序之一中使用了角度服务来存储数据。乍一看,这对我来说似乎是不正确的方法,但经过一段时间的考虑,我发现它与助焊剂存储的想法没有太大区别。您认为这种方法的优点和缺点是什么?
使用 ngrx 存储、操作、减速器等,而不是仅仅使用一些 getter/setter 的普通角度服务,是否会更好?
谢谢!
我大约两周前学习了 Vuex。我认为我对 Vuex(或 Flux)是什么以及它是如何工作的有相当深入的了解。
我仍然不知道什么时候应该把财产放入商店,什么时候不应该。您知道何时执行此操作的一些准则吗?
一个明显的情况是,当需要相同信息的组件在组件层次结构中彼此相距较远时。但如果他们很亲密(兄弟姐妹或亲子关系)怎么办?在这种情况下,你是否总是使用组件 props 来传达值?如果没有,那么什么时候没有,为什么?
极端一点,在很多情况下,我可以想象存储在存储中的大部分值和几乎没有任何道具的组件。这种情况对我来说会感觉很奇怪,但我想知道这种方法是否有什么问题。
flux ×10
reactjs ×6
javascript ×2
reactjs-flux ×2
ajax ×1
angular ×1
architecture ×1
arrays ×1
aurelia ×1
backend ×1
cookies ×1
flummox ×1
ngrx ×1
php ×1
react-redux ×1
react-router ×1
redux ×1
spring ×1
spring-boot ×1
vuex ×1