简体   繁体   English

相当于class中关于React生命周期的useEffect

[英]Which is equivalent to useEffect in class about React lifecycle

I am using slider component.我正在使用 slider 组件。

In my sample program.在我的示例程序中。 Slider.create is called in useEffect() Slider.createuseEffect()中被调用

export default function SectionBasics() {
  React.useEffect(() => {
    if (
      !document
        .getElementById("sliderRegular")
        .classList.contains("noUi-target")
    ) {
      Slider.create(document.getElementById("sliderRegular"), {
        start: [40],
        connect: [true, false],
        step: 1,
        range: { min: 0, max: 100 }
      });
    }
 });
 return (<div id=slider></div>)
}

However I want to move this to class extends React.Component但是我想将其移动到 class extends React.Component

So, I can't use useEffect() , then I try put it in render()所以,我不能使用useEffect() ,然后我试着把它放在render()

class ParamBoard extends React.Component {
  render() {
    if (
      !document
        .getElementById("slider")
        .classList.contains("noUi-target")
    ) {
      Slider.create(document.getElementById("slider"), {
        start: [40],
        connect: [true, false],
        step: 1,
        range: { min: 0, max: 100 }
      });
    }
    return (<div id=slider></div>)
   }

I guess this is because when render() is called id slider is not ready yet.我猜这是因为当render()被调用时,id slider还没有准备好。

However where should I put Slider.create in class??但是我应该把 Slider.create 放在哪里 class?

You should create a slider instance once when component mounts您应该在组件安装时创建一个 slider 实例一次

In functional component, you can simply put it in useEffect hook with empty array dependency在功能组件中,你可以简单地把它放在useEffect hook 中,空数组依赖

This is equivalent to componentDidMount() in class component.这相当于 class 组件中的componentDidMount()

They run once when the component mounts.它们在组件安装时运行一次。

export default function SectionBasics() {
  React.useEffect(() => {
    // ... your code goes here
  }, []);
  return <div id="slider"></div>;
}

class ParamBoard extends React.Component {
  componentDidMount() {
    // ... your code goes here
  }
  render() {
    return <div id="slider"></div>;
  }
}

Alternatively you could pass a function to ref which will be called as soon as the dom-node exists (or changes)或者,您可以将 function 传递给ref ,只要 dom 节点存在(或更改),它就会被调用

class ParamBoard extends React.Component {
  initSlider = node => {
    Slider.create(node, {
      start: [40],
      connect: [true, false],
      step: 1,
      range: { min: 0, max: 100 }
    });
  }

  render() {
    return (<div ref={this.initSlider}></div>)
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM