根据文档,描述如下:
在客户端(而非服务器端)仅被调用一次,即在初始渲染完成之后立即执行。
现在,当我尝试创建一个高阶组件时:
import React from 'react';
import { connect } from 'react-redux';
function wrap(Wrapped) {
class Wrapper extends React.Component {
componentDidMount() {
// I will place some reusable functionality here which need to
// be called once on mounted.
console.log('wrapper component mounted');
}
render() {
return <Wrapped {...this.props}/>
}
}
return Wrapper;
}
class Wrapped extends React.Component {
componentDidMount() {
console.log('wrapped component mounted');
}
render() {
return <div></div>;
}
}
connect()(wrap(Wrapped));
现在,每当props发生变化时,控制台将打印以下内容:
'wrapped component mounted'
'wrapper component mounted'
如果我移除
Wrapper
,它只会在第一次挂载时打印一次:`wrapped component mounted`
所以,为什么高阶组件中的componentDidMount会被调用多次?
Wrapper
和Wrapped
)已经挂载时,只要它没有卸载,componentDidMount
将不会再次调用。而我在这里的意思是,只要props更改,这两个componentDidMount
总是会被调用。 - Mas BagolcomponentDidMount
再次触发的部分。非常奇怪。 - ffxsamWrapper
组件的componentDidMount
中添加一些可重用的功能。上面的代码是在编写该功能之前的,当然我可以将该功能移动到Wrapped
组件中。在这种情况下,我需要在Wrapper
组件上使用componentDidMount
。 - Mas Bagolconnect()(wrap(Wrapper));
,但应该是connect()(wrap(Wrapped));
。 - ffxsamWrapped
也在那里时会出现问题。我更新了我的问题。 - Mas Bagol