从Redux状态内的数组获取活动项

从Redux状态内的数组获取活动项,redux,immutability,react-redux,Redux,Immutability,React Redux,我想用React/Redux应用程序创建一个草稿系统 我的草稿存储在一个由Redux减少的数组中。我在React组件中渲染草稿。当我单击一个项目时,被单击的项目应该被标记为活动,并且草稿会被加载 问题是,我不知道如何方便地从Redux状态获取当前活动数组项 我迄今为止所做的工作(缩小,无容器等): 从“React”导入React; 从“redux”导入{createStore}; 常量草稿=(状态=[{title:'}],操作=>{ 开关(动作类型){ 案例“创建新草案”: 返回[{title:

我想用React/Redux应用程序创建一个草稿系统

我的草稿存储在一个由Redux减少的数组中。我在React组件中渲染草稿。当我单击一个项目时,被单击的项目应该被标记为活动,并且草稿会被加载

问题是,我不知道如何方便地从Redux状态获取当前活动数组项

我迄今为止所做的工作(缩小,无容器等):

从“React”导入React;
从“redux”导入{createStore};
常量草稿=(状态=[{title:'}],操作=>{
开关(动作类型){
案例“创建新草案”:
返回[{title:'},…state];
案例“激活草案”:
//这就是我需要帮助的地方
案例“更新\激活\草稿”:
//这就是我需要帮助的地方
违约:
返回状态;
}
});
常量存储=创建存储(草稿);
const drafts=store.getState().drafts;
常量草稿=草稿[0];//也许是这样的?我觉得很难看
const createDraft=()=>store.dispatch({
键入:“创建新草案”,
});
const activateDraft=草稿=>(e)=>{
e、 预防默认值();
仓库调度({
草案,
键入:“激活\u草稿”,
});
};
const updateDraft=e=>store.dispatch({
标题:e.target.value,
键入:“更新\活动\草稿”,
});
导出默认值()=>(
    {drafts.map((元素,i)=>(
  • 元素名称
  • ))}
创造 );
那么,我如何知道哪个项目是活动的呢?如何“激活”项目?一种解决方案是在状态中设置一个“活动”指针,但处理起来并不舒服


谢谢大家!

我终于找到了这个问题的答案。我将activeDraft指针存储在一个附加的state属性中,以便通过
state.drafts[state.active]
获取activeDraft

我在我的减速器中使用此案例更新活动草稿:

case 'UPDATE_DRAFT':
  return [
    ...state.slice(0, action.active),
    Object.assign({}, state[action.active], action.draft),
    ...state.slice(action.active + 1),
  ];
action.active
是传递给组件的新状态属性,用于执行以下操作:

<input type="text" onChange={updateDraft(state.active)} />

草稿激活以同样的方式工作


谢谢你

我终于找到了这个问题的答案。我将activeDraft指针存储在一个附加的state属性中,以便通过
state.drafts[state.active]
获取activeDraft

我在我的减速器中使用此案例更新活动草稿:

case 'UPDATE_DRAFT':
  return [
    ...state.slice(0, action.active),
    Object.assign({}, state[action.active], action.draft),
    ...state.slice(action.active + 1),
  ];
action.active
是传递给组件的新状态属性,用于执行以下操作:

<input type="text" onChange={updateDraft(state.active)} />

草稿激活以同样的方式工作


谢谢你

始终在单独的道具中保持活动元素,这将使您的生活更加轻松,因此,下次当有人激活草稿时,只需将其对象复制到activeDraft Prop,当activeDraft属性更改时,您将如何更新草稿数组?如果您想同时更新数组,请将当前选定的索引存储在activeDraft中,而不是对象。嗯,我也有这个想法。我会试试的,谢谢!好的,它现在可以用于阵列切片!我会在一秒钟内发布一个答案。非常感谢。始终在单独的道具中保持活动元素,这将使您的生活更加轻松,因此,下次当有人激活草稿时,只需将其对象复制到activeDraft Prop,当activeDraft属性更改时,您将如何更新草稿数组?如果您想同时更新数组,请将当前选定的索引存储在activeDraft中,而不是对象。嗯,我也有这个想法。我会试试的,谢谢!好的,它现在可以用于阵列切片!我会在一秒钟内发布一个答案。非常感谢。