Javascript 如何在类似Om的不可变应用程序状态下对关系数据建模
我正在尝试决定是使用更传统的Flux实现还是使用类似Om的结构。我非常喜欢在javascript中使用带有游标的单个不可变应用程序状态对象,但我不确定如何对关系数据建模。我正在考虑使用类似的方法 我的问题是如何避免重复数据并处理从服务器发送的嵌套关系数据?假设我有一个REST端点,它为我提供库存,每个库存项目都有一个嵌套的供应商。我还有一个供应商的端点。我希望有一个在我的应用程序状态下的所有供应商的列表,但也要在我的库存项目上引用这些供应商。当我对某个供应商进行更新时,我希望它对引用该供应商的所有库存项目进行更改Javascript 如何在类似Om的不可变应用程序状态下对关系数据建模,javascript,reactjs,immutability,immutable.js,Javascript,Reactjs,Immutability,Immutable.js,我正在尝试决定是使用更传统的Flux实现还是使用类似Om的结构。我非常喜欢在javascript中使用带有游标的单个不可变应用程序状态对象,但我不确定如何对关系数据建模。我正在考虑使用类似的方法 我的问题是如何避免重复数据并处理从服务器发送的嵌套关系数据?假设我有一个REST端点,它为我提供库存,每个库存项目都有一个嵌套的供应商。我还有一个供应商的端点。我希望有一个在我的应用程序状态下的所有供应商的列表,但也要在我的库存项目上引用这些供应商。当我对某个供应商进行更新时,我希望它对引用该供应商的所
类似于Om的结构是否适用于此类应用程序,或者更传统的Flux风格的应用程序(具有谨慎的商店)是否更好?您可能希望研究类似于“Flux”框架的东西。这是绝对优秀的-我们在Docker使用它。这就是为什么它是好的,以及它如何帮助你 为什么要使用redux? 它使用单一商店模式。所有存储都将Redux自身的状态保存在自己的密钥中。状态重复保存的一个示例是:
{
vendors: [{...}, ...], // The "vendor" store updates this part of the state
inventory: [...] // the "inventory" store updates this part of the state
}
Redux或Redux提供者是所有组件的父级。因此,所有组件都将状态作为道具接收
单一商店模式如何改善情况?
import assign from 'object-assign';
import consts, { metrics, loading, URLS } from 'consts';
const actions = {
// As you can see, each action within a store accepts the current "state"
// and can modify that state by returning new data.
[metrics.FETCH_METRICS_PENDING]: (state, data) => {
return assign({}, state, {status: loading.PENDING});
},
[metrics.FETCH_METRICS_SUCCESS]: (state, data) => {
return assign({}, state, {status: loading.SUCCESS, metrics: data.payload});
},
[metrics.FETCH_METRICS_FAILURE]: (state, data) => {
return assign({}, state, {status: loading.FAILURE});
},
[metrics.OBSERVE_METRICS_DATA]: (state, data) => {
let metrics = state.metrics.slice().concat(data.payload);
return assign({}, state, {metrics});
}
}
// This is the single method that's exported and represents our store.
// It accepts the current state as its primary argument, plus the action
// data as a payload.
//
// This delegates to the methods above depending on `data.type`.
export default function metricStore(state = {}, data) {
if (typeof actions[data.type] === "function") {
return actions[data.type](state, data);
}
return state;
}
这个模型如何处理关系数据?
每次通过操作创建者请求数据时,它都可以调度多个操作,同时更新供应商和库存状态。这将在一次渲染中反映在你的应用程序中。我有一个非常类似的决定要做。也可以查看Baobab的数据结构。我没有使用过这个,但您可能想查看一下。