在 Redux React 中传递对象以更改 [重复]

Posted

技术标签:

【中文标题】在 Redux React 中传递对象以更改 [重复]【英文标题】:Passing object to change in Redux React [duplicate] 【发布时间】:2020-08-22 02:02:11 【问题描述】:

我想编写一个函数,在接收到我想要更改某个值的项目后,对其进行更改,然后更新过滤器。我不知道如何在我的对象过滤器中找到这个特定元素,因为我传递了对象本身,没有任何“id”

mapActions.js

export const setFilters = (el, old_filters) => 
    console.log(el)
    const filters = 
        ...old_filters,
        [el]:  
          ...old_filters[el],
          active: !old_filters[el].active
        
      ;
    return (dispatch, getState) => 
        dispatch(
            type: actions.SET_FILTERS,
            filters: filters
        )
    

FilersObject.js

    changeFilterHandler = (el, i) => 
        this.props.setFilters(el, this.props.filters);
    

[..]

            Object.keys(this.props.filters).map(x => this.props.filters[x]).map((el, i)=> 
                return(
                    <ObjectFiltersElement 
                        key=i 
                        object=el
                        changeFilterHandler=(el) => (this.changeFilterHandler(el))
                        />
                )
            )

一切正常,但只是我不知道如何在函数 setFilters() 中的 mapActions.js 中在更改变量 'active' 后交换合适的对象

console.log(el)

我得到的错误:

TypeError: Cannot read property 'active' of undefined

状态:

const initState = 
    filters: 
        basen: 
            active: true,
            name: 'BASEN'
        ,
        koszykowka: 
            active: true,
            name: 'KOSZYKÓWKA'
        ,
        pilka_nozna: 
            active: true,
            name: 'PIŁKA NOŻNA'
        
    

【问题讨论】:

看起来很相似,但没有。我有问题,因为我的函数无法识别在“过滤器”对象中发生变化的对象。我知道如何更改它,但不知道如何告诉我的函数应该是哪一个。我现在编辑了一点我的问题。也许理解问题会更好。 此时,您应该提供minimal reproducible example。请记住不要将答案包含在您的问题中,从而使它们无效。 是的,我知道。抱歉,我还在学习如何使用这个论坛。但是你的回答还是有帮助的,所以谢谢:P 【参考方案1】:

您当前的代码似乎将您的old_filters 更改为setFilters。相反,请确保只更改您创建的新对象。

以下是一种相当常见的模式,可以将状态树浅拷贝到需要更改变量的位置。

export const setFilters = (el, old_filters) => 
  const filters = 
    ...old_filters,
    [el]:  
      ...old_filters[el],
      active: !old_filters[el].active
    
  ;

  return (dispatch, getState) => 
    dispatch(
      type: actions.SET_FILTERS,
      filters: filters
    )
  

编辑:将您的过滤器键而不是对象值传递给您的更改处理程序将是有益的:

Object.entries(this.props.filters).map(([key, el])=> 
  return(
    <ObjectFiltersElement 
      key=key 
      object=el
      changeFilterHandler=() => (this.changeFilterHandler(key))
    />
  )
)

【讨论】:

我试过了,但我得到了 TypeError: Cannot read property 'active' of undefined 我添加了 console.log(el) 屏幕。 setFilters 函数获得了 'el' 的内容,但我认为该函数无法在文件管理器对象中识别它。而且我不知道如何解决它。 @poldeeek 改用[el.name] 我认为我不能因为我在 redux 中的 initState。我刚刚添加了状态。 好的,我知道结构了。我将建议您如何调用更改处理程序

以上是关于在 Redux React 中传递对象以更改 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

React Page 在根据 redux 值重定向之前闪烁

如何在 React/Redux 中获取和传递对象(JSON API)?

react-redux,使用一个操作从两个输入字段中更改对象键/值

如何将带有 Redux 的徽章值传递给 React Native 上的 BottomTabBar

用户可以更改 Chrome 中 Redux/Mobx 的值以访问受限视图吗?

REACT + REDUX:在 redux 状态更改时 mapStateToProps 更新状态,但视图未按照新状态呈现