当前位置: 首页 > 面试题库 >

如果连接到未更改的商店,React componentDidUpdate方法将不会在继承的道具更改上触发

娄森
2023-03-14
问题内容

我想让我的组件知道是否已经加载了一些库。要知道从任何上下文来看,我都将其连接到商店的“库”
reduce组件中。我还this.props.dataObject从调用组件的父级那里传递了一个配置对象。像这样:

class GoogleButton extends Component {
    render() {
        if (this.props.libraries.google) {
            return <a id='sharePost' className='google_icon'></a>
        } else {
            return null
        }
    }

    componentDidUpdate() {
        gapi.interactivepost.render('sharePost', this.props.dataObject)
    }
}

function mapStateToProps(state) {
    return { libraries: state.libraries }
}

export default connect(mapStateToProps)(GoogleButton)

处理库状态的reducer如下所示:

let newState = {...state}
newState[action.libraryName] = action.state
return newState

当我更改库状态时componentDidUpdate有效。问题是当我改变父母继承的道具时this.props.dataObject。在这种情况下,componentDidUpdate不会触发。如果我connect从组件中删除,它会按预期工作。我在这里想念什么吗?


问题答案:

我解决了 我不确定100%是否正确,但我会解释。如果我对某事不对,请纠正我。

我一直在思考Dan在回答中所说的浅薄的平等检查。问题在那里。我从父对象传递了一个对象,并且该对象的嵌套元素发生了变化。对象保持不变。因此,使用连接带来的浅层平等检查,组件将永远不会更新。

Object.assign({}, dataObject)当我传递道具时,我的解决方案是在父级使用,所以我制作了另一个不同的对象。现在,浅层相等性检查可以对其进行比较,并确定道具已更改,并且在那里可以更新组件。



 类似资料:
  • 我想知道我的组件是否已经加载了一些库。要知道,从任何上下文,我把它连接到我商店的“库”减速器到我的组件。我还从调用组件的父级传递一个配置对象。像这样: 处理库状态的reducer如下所示: 当我更改库状态时,起作用。问题是当我更改父级继承的道具时。在这种情况下,componentDidUpdate不会触发。如果我从组件中移除,它将按要求工作。我错过了什么?

  • 问题内容: 我在reactjs-flux上编写了一个简单的应用程序,并且一切正常,只是我收到reactjs的警告,告诉我在未安装的组件上调用setState。 我已经发现这是因为未将挂钩所钩挂的changelistener从商店中删除。我知道这是因为,当我从中打印侦听器列表时,我看到应该被销毁的侦听器仍然存在,并且当我多次安装/卸载同一组件时,列表会变得更大。 我从BaseStore粘贴代码: 我

  • 我有以下结构: ChildComponent只是呈现值:

  • 当用户滑动滑块时,我试图触发一个事件,当滑动停止时,该值会更改。根据jQuery文档,对于这种情况,事件是理想的选择。所以我正在尝试: 然而,我观察到,当我向右拖动滑块并再次将其拖回起点(页面加载时滑块的初始位置)时,警报仍会触发。这是jQuery错误吗?如果没有,我该如何解决这个问题?

  • 所以我对vue的父子组件通信有问题。问题是,当我导航到一个组件后,它应该调用ajax从服务器获取数据。收到数据后,父组件应该通过道具将其发送给所有子组件,但道具数据不显示。子组件只有在我更改编辑器上的代码后才开始显示props数据。这是我父组件的代码 这是我的单一产品规格组件,不会加载道具数据: 正如我所说,我的单一产品规范组件的唯一问题不是它不会加载道具数据。问题是,当我在文本编辑器中更改代码时

  • 问题内容: 我在变量范围方面遇到麻烦。 我期望输出到,但结果是。为什么我在方法中更改了数组中的值,但是原来的数组却更改了? 问题答案: Java中的数组是一个对象。当您通过创建数组时,它是在堆上创建的,并且返回一个参考值(类似于C中的指针)并将其分配给您的变量。 在C语言中,这表示为: 当您将该变量传递给方法时,您将传递给该方法中的局部(堆栈)变量分配(复制)的参考值。不会复制数组的内容,仅复制参