问题形容

  • 框架:react
  • 脚手架:create-react-app
  • UI组件:Ant Design
  • 具体组件:<Modal/>

开发我的项目,引入Antd的Modal弹框组件,当点击按钮让Model呈现的时候,控制台呈现如下正告,截图如下:

正告截图

起因

是因为react脚手架中开启了严格模式,严格到限度代码的书写标准。相当于一个react版的eslint。不标准就会在控制台抛出来。具体哪里不标准呢?

是因为Antd组件中有些应用了CSSTransition,然而CSSTransition中的局部代码的写法对于react而言,不是最新的写法,不是十分标准的写法,所以严格模式下的react就会抛出正告。然而这个理论并不影响应用,因为严格模式只会在开发模式下应用。在生产模式下就不会呈现这样的正告了。然而强迫症程序员就是想要不显示这个正告怎么办?

解决方案一 敞开react严格模式

ReactDOM.render(  // <React.StrictMode> 不要这个react严格模式标签了    <App />  // </React.StrictMode>  ,  document.getElementById('root'));

然而这种形式有点因噎废食,因为在开发我的项目中,React.StrictMode这个标签做代码校验性能还是比拟重要的,最好不要敞开。

解决方案二 不应用Antd组件的css成果

比方当咱们敞开这个Model组件的css动画成果就行了,就不会呈现这个正告报错。因为不应用AntD组件的动画,就不会用到其组件外部的CSSTransition,就不会被react的严格模式解析到,就不会呈现正告,代码如下:

render() {    return (      <>        <div className="box">          <Button onClick={this.clickBtn} type="primary">点击弹框</Button>          <div>            {/* transitionName="" 和 maskTransitionName="" 是去除弹框动画属性 */}            <Modal              transitionName=""              maskTransitionName=""              title="弹框"              visible={this.state.isShowModel}              onOk={this.handleOk}              onCancel={this.handleCancel}            >              <p>弹框内容</p>              <p>弹框内容</p>              <p>弹框内容</p>            </Modal>          </div>        </div>      </>    )  }

解决方案三 期待Antd降级

Antd降级了当前,就会更改组件外部的动画的写法,更新到最新版本的写法,就不会呈现这样的正告了

其实这个正告不必管也行的,毕竟生产环境就没了

残缺代码

测试的话,间接复制粘贴即可

import React, { Component } from 'react'import { Button, Modal } from 'antd';import 'antd/dist/antd.css';export default class App extends Component {  state = {    isShowModel: false,  }  clickBtn = () => {    // 点击关上    this.setState({ isShowModel: true })  }  handleOk = () => {    // 点击Ok按钮敞开    this.setState({ isShowModel: false })  }  handleCancel = () => {    // 点击Cancel按钮敞开    this.setState({ isShowModel: false })  }  render() {    return (      <>        <div className="box">          <Button onClick={this.clickBtn} type="primary">点击弹框</Button>          <div>            {/* transitionName=""和maskTransitionName=""是去除弹框动画属性 */}            <Modal              transitionName=""              maskTransitionName=""              title="弹框"              visible={this.state.isShowModel}              onOk={this.handleOk}              onCancel={this.handleCancel}            >              <p>弹框内容</p>              <p>弹框内容</p>              <p>弹框内容</p>            </Modal>          </div>        </div>      </>    )  }}