如何通过反应 redux 中的唯一字符串切换状态?

Posted

技术标签:

【中文标题】如何通过反应 redux 中的唯一字符串切换状态?【英文标题】:How to toggle state by unique string in react redux? 【发布时间】:2020-11-10 09:14:34 【问题描述】:

我在 thunk 中间件的帮助下通过映射来自 JSON 响应的数据来动态地在组件文件中创建一个列表。 我想从该列表中选择元素并将它们添加到“我的收藏夹”中, 我的 JSON 响应没有唯一的 ID,而是唯一的字符串。

减速机:

   const initialstate =  isFav: false 
   const reducer = (state=initialstate, action) => 
   switch(action.type)
   case actionTypes.TOGGLE_FAVORITE:
             return 
              ...state,
              isFav: **What to do here?**
             
                     
         default:
             break;
         
    

export default reducer;

Action.js:

export const TOGGLE_FAVORITE = 'TOGGLE_FAVORITE';
export const togglefav = (url) =>
    return
        type: TOGGLE_FAVORITE,
        payload: url
    

组件.js

this.props.dailySource.map((source,index) =>
...
<div className=classes.star>
            <span className="fa fa-star" key=index onClick=()=>             
            this.props.onToggleFavorite(source.url) 
            style= color: (this.props.toggleFav) ? 'red' : '' ></span>
            </div>

))

const mapStateToProps = state =>
  return
    dailySource: state.list.newsItem,
    toggleFav: state.list.isFav 
  


const mapDispatchToProps = dispatch =>
  return
    onToggleFavorite: (url) => dispatch (actionCreators.togglefav(url))
  

【问题讨论】:

【参考方案1】:

如果你能简化你的模式会更好。

与其将 isFav 提取到另一个状态树,不如将它放在列表本身的对象中会容易得多。

让我们看看代码。

减速器

const initialState = [];

const reducer = (state=initialState, action) => 
    switch(action.type) 
        case actionTypes.TOGGLE_FAVORITE:
            const dailySource = [...state].map((v) => 
                if (v.url === action.url) 
                    v.isFav = true;
                
            return v;
            );
            return dailySource;
        default:
            return state;
    

组件

this.props.dailySource.map((source,index) =>
<div className=classes.star>
            <span className="fa fa-star" key=index onClick=()=>             
            this.props.onToggleFavorite(source.url) 
            style= color: source.isFav ? 'red' : '' ></span>
            </div>

))

【讨论】:

这是一个好方法。即使它不起作用,我也更接近解决方案。谢谢。 请澄清为什么它不起作用,我也会进一步详细说明。甚至可以做一个迷你回购仅供参考。谢谢

以上是关于如何通过反应 redux 中的唯一字符串切换状态?的主要内容,如果未能解决你的问题,请参考以下文章

组件不会重新渲染,但 redux 状态已通过反应钩子更改

在选择器中访问反应路由器状态

如何使用从子组件传递给组件的反应变量更新 redux 状态

如何在同一个反应组件中使用本地状态和 redux 存储状态?

如何使用浏览器后退按钮跳转到Redux状态

如何使用字符串或状态动态切换反应组件?