Redux:在何处放置与 DOM 的交互,由动作触发但在 React 应用程序之外发生变化
Redux: where to place interaction with the DOM, that is triggered by an action but changes outside of the React app
我有一个 React/Redux 应用程序,它负责实时销售(拍卖)的交互式项目列表。我的 <div id='app'></div>
只处理列表。
问题是商品何时售出,我需要将其添加到另一个列表,该列表不在 React 应用程序内。由于列表是在服务器上呈现的,因此唯一需要的交互是添加那些已售出的商品。
现在我正在做这样的事情
// redux thunk action
export const sellItem = (item) => (dispatch) => {
dispatch(requestSellItem(item)); // set loading state
return fetch('api/sell_item/' + item.id)
.then(response => response.json())
.then(json => {
// remove the item from the React list
dispatch(sellItemSuccess(item.id));
// append the item to the sold items list
// this is the function that puts the sold item in the
// list outside of the React app
appendSoldItem(item);
})
.catch(err => {
// do fallback here
dispatch(sellItemError(err));
});
};
我想知道这样做是否合适,还是我应该把它放在其他地方?
如果您不设想没有 "adding the item to another list" 也可以出售物品的场景,那么这是完全可以接受的。如果没有,您可能希望 出售商品的行为通知外部服务。
无论如何,由于我们处理的是外部服务,我想说这是 middleware layer 的完美示例。这是一个例子:
import { ITEM_SOLD_SUCCESS } from ... // Import same action created by sellItemSuccess()
let itemSoldNotifier = store => next => action => {
if (action.type === ITEM_SOLD_SUCCESS) {
// Notify the external service that the item was sold
appendSoldItem(action.item); // Assuming that the action contains the item sold itself
}
return next(action);
}
以下是在商店中应用该图层的方法:
let store = createStore(
combineReducers(reducers),
applyMiddleware(
itemSoldNotifier
)
)
我有一个 React/Redux 应用程序,它负责实时销售(拍卖)的交互式项目列表。我的 <div id='app'></div>
只处理列表。
问题是商品何时售出,我需要将其添加到另一个列表,该列表不在 React 应用程序内。由于列表是在服务器上呈现的,因此唯一需要的交互是添加那些已售出的商品。
现在我正在做这样的事情
// redux thunk action
export const sellItem = (item) => (dispatch) => {
dispatch(requestSellItem(item)); // set loading state
return fetch('api/sell_item/' + item.id)
.then(response => response.json())
.then(json => {
// remove the item from the React list
dispatch(sellItemSuccess(item.id));
// append the item to the sold items list
// this is the function that puts the sold item in the
// list outside of the React app
appendSoldItem(item);
})
.catch(err => {
// do fallback here
dispatch(sellItemError(err));
});
};
我想知道这样做是否合适,还是我应该把它放在其他地方?
如果您不设想没有 "adding the item to another list" 也可以出售物品的场景,那么这是完全可以接受的。如果没有,您可能希望
无论如何,由于我们处理的是外部服务,我想说这是 middleware layer 的完美示例。这是一个例子:
import { ITEM_SOLD_SUCCESS } from ... // Import same action created by sellItemSuccess()
let itemSoldNotifier = store => next => action => {
if (action.type === ITEM_SOLD_SUCCESS) {
// Notify the external service that the item was sold
appendSoldItem(action.item); // Assuming that the action contains the item sold itself
}
return next(action);
}
以下是在商店中应用该图层的方法:
let store = createStore(
combineReducers(reducers),
applyMiddleware(
itemSoldNotifier
)
)