为了账号安全,请及时绑定邮箱和手机立即绑定

警告:在 StrictMode 中不推荐使用 findDOMNode。findDOMNode

警告:在 StrictMode 中不推荐使用 findDOMNode。findDOMNode

青春有我 2022-06-05 17:05:47
我正在尝试将函数用作组件内的道具,并且该组件是另一个组件的子组件。但该功能不起作用。?我能知道为什么吗。这是我在控制台中收到的警告。警告:在 StrictMode 中不推荐使用 findDOMNode。findDOMNode 被传递了一个在 StrictMode 中的 Transition 实例。相反,将 ref 直接添加到要引用的元素这是我的代码class Todo extends Component {  state = {    show: false,    editTodo: {      id: "",      title: "",      isCompleted: false    }  }  handleClose = () => {    this.setState({ show: false })  }  handleShow = () => {    this.setState({ show: true })  }  getStyle () {    return {      background: '#f4f4f4',      padding: '10px',      borderBottom: '1px #ccc dotted',      textDecoration: this.props.todo.isCompleted ? 'line-through'        : 'none'    }  }  //this method checks for changes in the edit field  handleChange = (event) => {    this.setState({ title: event.target.value })    console.log(this.state.editTodo.title);  }  render () {    //destructuring    const { id, title } = this.props.todo;    return (      <div style={this.getStyle()}>        <p>          <input type='checkbox' style={{ margin: "0px 20px" }} onChange={this.props.markComplete.bind(this, id)} /> {''}          {title}          <Button style={{ float: "right", margin: "0px 10px" }} variant="warning" size={"sm"} onClick={this.handleShow}>Edit</Button>{' '}          <Button style={{ float: "right" }} variant="danger" size={"sm"} onClick={this.props.DelItem.bind(this, id)}>Delete</Button>        </p>        <Modal show={this.state.show} onHide={this.handleClose}>          <Modal.Header closeButton>            <Modal.Title>Edit your Task!</Modal.Title>          </Modal.Header>          <Modal.Body >            <FormGroup >              <Form.Control                type="text"                value={this.state.editTodo.title}                onChange={this.handleChange}              />            </FormGroup>          </Modal.Body>          <Modal.Footer>
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

在 index.js 中更改<React.StrictMode><App /><React.StrictMode><App />,您将不会看到此警告。请注意,严格模式可以帮助您

  • 识别具有不安全生命周期的组件

  • 关于旧版字符串引用 API 使用的警告

  • 关于不推荐使用 findDOMNode 的警告

  • 检测意外的副作用

  • 检测遗留上下文 API

删除前请参考https://reactjs.org/docs/strict-mode.html 。


查看完整回答
反对 回复 2022-06-05
?
心有法竹

TA贡献1866条经验 获得超5个赞

如果您正在使用react-bootstrap变通方法中的 Modal 或 Carousel,则禁用动画。关闭它们会使警告消失。


对于模态:


<Modal animation={false}>

    <Modal.Header closeButton>

        <Modal.Title>Title</Modal.Title>

    </Modal.Header>

    <Modal.Body>

        Content

    </Modal.Body>

</Modal>

对于轮播:


<Carousel slide={false} fade={false}>

    <Carousel.Item>

      Scene 1

    </Carousel.Item>

    <Carousel.Item>

      Scene 2

    </Carousel.Item>

</Carousel>

我知道一旦它没有回答 OP 问题,它会更适合作为评论,但我没有足够的声誉来这样做,也许它可以帮助某人。


查看完整回答
反对 回复 2022-06-05
?
慕神8447489

TA贡献1780条经验 获得超1个赞

@Ross Allen 的响应与基本问题(警告)无关,它解决了代码中的语法问题。

@Ali Rehman 的响应与警告更相关,但也没有正确解决问题,它只是隐藏了问题,因此警告不再出现。如果我们不关心弃用,为什么不呢!

是的,问题来自 React.StrictMode:

<React.StrictMode> 
<App />
</React.StrictMode>

StrictMode 是一种用于突出显示应用程序中潜在问题的工具。它为其后代激活额外的检查和警告,例如:

  • 识别具有不安全生命周期的组件

  • 关于旧版字符串引用 API 使用的警告

  • 关于不推荐使用 findDOMNode 的警告

  • 检测意外的副作用

  • 检测遗留上下文 API

由于问题中没有完全给出错误回溯,我猜这个问题与关于已弃用 findDOMNode 使用的警告有关,因为引用了渲染方法中的元素:

<Modal show={this.state.show} onHide={this.handleClose}>

      <Modal.Header closeButton>

        <Modal.Title>Edit your Task!</Modal.Title>

      </Modal.Header>

      <Modal.Body >

        <FormGroup >

          <Form.Control

            type="text"

            value={this.state.editTodo.title}

            onChange={this.handleChange}

          />

        </FormGroup>

      </Modal.Body>

      <Modal.Footer>

        <Button variant="secondary" onClick={this.handleClose}>

          Close

                      </Button>

        <Button variant="primary" onClick={this.handleClose}>

          Save Changes

                      </Button>

      </Modal.Footer>

    </Modal>

当组件被渲染时,模态框也被渲染了,我们尝试改变组件的状态,组件(以及模态框)会重新渲染,在这个阶段模态框无法访问状态.


解决警告的解决方案是使用React refs。Refs 有助于访问在 render 方法中创建的 DOM 节点或 React 元素。


查看完整回答
反对 回复 2022-06-05
  • 3 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信