Reactjs componentWillReceiveProps已重命名

Reactjs componentWillReceiveProps已重命名,reactjs,Reactjs,我使用的是使用ReactSwipableView包的MaterialUI SwipeableView,我在控制台上遇到了这个错误 react dom.development.js:12466警告:componentWillReceiveProps已重命名,不建议使用。有关详细信息,请参阅 将数据提取代码或副作用移动到componentDidUpdate 如果在道具更改时更新状态,请重构代码以使用记忆技术,或将其移动到静态getDerivedStateFromProps。了解更多信息,请访问:

我使用的是使用ReactSwipableView包的MaterialUI SwipeableView,我在控制台上遇到了这个错误

react dom.development.js:12466警告:componentWillReceiveProps已重命名,不建议使用。有关详细信息,请参阅

  • 将数据提取代码或副作用移动到componentDidUpdate
  • 如果在道具更改时更新状态,请重构代码以使用记忆技术,或将其移动到静态getDerivedStateFromProps。了解更多信息,请访问:
  • 将componentWillReceiveProps重命名为UNSAFE_componentWillReceiveProps以在非严格模式下抑制此警告。在React 17.x中,只有不安全的名称才起作用。要将所有不推荐使用的生命周期重命名为新名称,可以在项目源文件夹中运行
    npx react codemod rename unsafe lifecycles
请更新以下组件:ReactSwipableView

有什么方法可以消除这个错误吗?我确实尝试过不安全的组件将收到道具,但没有任何改变

现在,作为开源软件的消费者,您可以:

  • 等待他们解决(或不解决)问题
  • 冷静一点,提交一份公关来为他们解决:)
  • 查找要使用的新包

最终,这不是一个与软件相关的错误,而是它所依赖的依赖关系。解决这些问题并不是你的责任。如果你的应用程序运行,它会很好。
react dom.development.js
中的警告不会出现在生产中。

我在查找代码组件中调用WillReceiveProps的位置时遇到问题。我确实注意到在警告中提到了一个特殊的组件,“抽屉”,它是我们正在使用的ant-d库的一部分。将ant-d升级到最新版本后,警告消失了

这是react native project中常见的错误。因此可以通过以下步骤解决:

  • 首先在react原生项目目录中安装lodash,即
-然后在.js文件中编写以下代码:

    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. + ...);
}

...