[英]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.create
在useEffect()
中被调用
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.