警告:findDOMNode 在 StrictMode 中已弃用。findDOMNode 被传递了一个位于 StrictMode 内部的 Transition 实例

我正在尝试将函数用作组件内的道具,并且该组件是另一个组件的子组件。但是该功能不起作用。?我能知道为什么吗?这是我在控制台中收到的警告。

警告:findDOMNode 在 StrictMode 中已弃用。findDOMNode传递了一个Transition的实例,它位于StrictMode中。相反,应将 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>
            <Button variant="secondary" onClick={this.handleClose}>
              Close
                          </Button>
            <Button variant="primary" onClick={this.handleClose}>
              Save Changes
                          </Button>
          </Modal.Footer>
        </Modal>
      </div>
    )

  }
}

答案 1

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

  • 识别生命周期不安全的组件
  • 有关旧字符串 ref API 用法的警告
  • 有关已弃用的 findDOMNode 用法的警告
  • 检测意外的副作用
  • 检测旧版上下文 API

在删除之前,请参阅 https://reactjs.org/docs/strict-mode.html


答案 2

如果您使用的是模式或轮播,则解决方法是禁用动画。关闭它们会使警告消失。react-bootstrap

对于模态:

<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问题,它更适合作为评论,但我没有足够的声誉来这样做,也许它可以帮助某人。

编辑这在v2 alpha上已修复