gpt4 book ai didi

javascript - 从 redux 中的 reducer 取回 ID

转载 作者:搜寻专家 更新时间:2023-11-01 04:23:15 25 4
gpt4 key购买 nike

我是新手,正在尝试使用 React 和 Redux 构建一个简单的书签应用程序。

我无法解决这个问题:

用户可以创建一个书签并将其添加到多个文件夹。所以我发送一个 addMark(bookmark) 操作,然后是 addMark(folder)editFolder(folder) 如果文件夹已经存在。如您所见,书签和文件夹是通过相同的操作添加的,因为在我的状态树中它们都只是标记 - 通过它们的类型属性来区分。

我的问题:如何告诉文件夹对象哪个是要添加到文件夹书签列表的新书签?如何在两次调度之间检索新创建的书签的 ID?

我觉得不满意的解决方案:

  1. 我知道 bookmark-ID 是如何在 reducer 中生成的(通过 Math.max 在现有的书签 ID 上),所以我可以在两次调度之间重现新的书签 ID。这听起来像一个糟糕的黑客。
  2. 书签和文件夹保存在同一个状态分支(同一个 reducer)中,因为它们都只是“标记”,我可以有一个引用最新添加的书签的状态属性,但这听起来也是一个糟糕的 hack .

一些源代码,以了解我所拥有的:

// mapping between dispatcher and props to my react view
const mapDispatchToProps = (dispatch) => ({
saveMark: (mark) => {
if (mark.id) {
dispatch(editMark(mark));
} else {
dispatch(addMark(mark));
}
},
});
export default connect(mapStateToProps, mapDispatchToProps)(AddMark);

还有 Inside AddMark,它是容器组件:

// save the bookmark first
this.props.saveMark({
type: 'bookmark',
title: this.state.title,
url: this.state.url,
icon: this.props.icon,
style: this.state.style,
});
// now I need the bookmark ID
folders.forEach(folder => {
folder.children.push(bookmarkID) // <-- !!!
});
folders.forEach(folder => this.props.saveMark(folder));

我找不到令人满意的解决方案。

最佳答案

我认为您应该在这里只发送一个操作:addBookmark(),它接受书签对象和文件夹。

处理将书签对象添加到文件夹的代码应该是 reducer 的一部分。

此外,请参阅 Todos example在 Redux 项目中。它在 Action 创建中提供了 id,以便可以在组件中读取它。您还可以使用当前状态来计算最新的 id:

function addBookmark(bookmark, folder) {
return (dispatch, getState) => {
const newBookmark = Object.assign({
id: Math.max(0, ...getState().bookmarks.map(b => b.id)) + 1,
}, bookmark);
dispatch({
type: 'ADD_BOOKMARK',
bookmark: newBookmark,
folder: folder
});
}
}

请注意示例需要 redux-thunk分发这些操作的中间件。

然后你可以访问文件夹reducer中带有id的书签

function folderReducer(state = [], action) {
if(action.type === 'ADD_BOOKMARK') {
return state.map(folder => {
if(folder === action.folder) {
return Object.assign({}, folder, {children: [...folder.children, action.bookmark.id]}
}
return folder;
})
}
//another reducer code
return state;
}

关于javascript - 从 redux 中的 reducer 取回 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com