Reactjs componentWillReceiveProps已重命名
我使用的是使用ReactSwipableView包的MaterialUI SwipeableView,我在控制台上遇到了这个错误 react dom.development.js:12466警告:componentWillReceiveProps已重命名,不建议使用。有关详细信息,请参阅Reactjs componentWillReceiveProps已重命名,reactjs,Reactjs,我使用的是使用ReactSwipableView包的MaterialUI SwipeableView,我在控制台上遇到了这个错误 react dom.development.js:12466警告:componentWillReceiveProps已重命名,不建议使用。有关详细信息,请参阅 将数据提取代码或副作用移动到componentDidUpdate 如果在道具更改时更新状态,请重构代码以使用记忆技术,或将其移动到静态getDerivedStateFromProps。了解更多信息,请访问:
- 将数据提取代码或副作用移动到componentDidUpdate
- 如果在道具更改时更新状态,请重构代码以使用记忆技术,或将其移动到静态getDerivedStateFromProps。了解更多信息,请访问:
- 将componentWillReceiveProps重命名为UNSAFE_componentWillReceiveProps以在非严格模式下抑制此警告。在React 17.x中,只有不安全的名称才起作用。要将所有不推荐使用的生命周期重命名为新名称,可以在项目源文件夹中运行
npx react codemod rename unsafe lifecycles
- 等待他们解决(或不解决)问题
- 冷静一点,提交一份公关来为他们解决:)
- 查找要使用的新包
最终,这不是一个与软件相关的错误,而是它所依赖的依赖关系。解决这些问题并不是你的责任。如果你的应用程序运行,它会很好。
react dom.development.js
中的警告不会出现在生产中。我在查找代码组件中调用WillReceiveProps的位置时遇到问题。我确实注意到在警告中提到了一个特殊的组件,“抽屉”,它是我们正在使用的ant-d库的一部分。将ant-d升级到最新版本后,警告消失了 这是react native project中常见的错误。因此可以通过以下步骤解决:
- 首先在react原生项目目录中安装lodash,即
import { YellowBox } from 'react-native';
import _ from 'lodash';
YellowBox.ignoreWarnings(['componentWillReceiveProps']);
const _console = _.clone(console);
console.warn = message => {
if (message.indexOf('componentWillReceiveProps') <= -1) {
_console.warn(message);
}
};
从'react native'导入{YellowBox};
从“lodash”进口;
忽略警告(['componentWillReceiveProps');
const_console=u.clone(console);
console.warn=消息=>{
如果(message.indexOf('componentWillReceiveProps')使用getDerivedStateFromProps
而不是componentWillReceiveProps
例如:
之前:
//之前
类ExampleComponent扩展了React.Component{
状态={
伊斯克洛林敦:错,
};
组件将接收道具(下一步){
if(this.props.currentRow!==nextProps.currentRow){
这是我的国家({
伊斯克罗宁镇:
nextrops.currentRow>this.props.currentRow,
});
}
}
}
之后:
//之后
类ExampleComponent扩展了React.Component{
//在构造函数中初始化状态,
//或者使用属性初始值设定项。
状态={
伊斯克洛林敦:错,
最后一行:空,
};
静态getDerivedStateFromProps(props,状态){
if(props.currentRow!==state.lastRow){
返回{
IsCrollingDown:props.currentRow>state.lastRow,
lastRow:props.currentRow,
};
}
//返回null以指示状态没有更改。
返回null;
}
}
只需在node_modules/react-dom/cjs/react-dom.development.js和node_modules/react-dom/umd/react-dom.development.js中阻塞警告命令,即可清除警告
之前:
...
if (componentWillReceivePropsUniqueNames.size > 0) {
var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);
warn('componentWillReceiveProps has been renamed, and is not recommended for use. + ...);
}
...
之后:
...
if (componentWillReceivePropsUniqueNames.size > 0) {
var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);
//warn('componentWillReceiveProps has been renamed, and is not recommended for use. + ...);
}
...
您是在组件中使用组件WillReceiveProps
,还是来自您的软件包?它来自react swipeable views软件包
...
if (componentWillReceivePropsUniqueNames.size > 0) {
var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);
//warn('componentWillReceiveProps has been renamed, and is not recommended for use. + ...);
}
...