将javascript放入react的最佳位置在哪里?

pgvzfuti  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(332)

我有三个选择。区别在于我的javascript代码所在的位置。
第一(内部返回):

export default function App() {

    return (
        <div>
            {/* Some javascript code */}
            <p>I am a paragraph</p>
        </div>
    )
}

第二(返回前):

export default function App() {

    {/* Some javascript code */}

    return (
        <div>
            <p>I am a paragraph</p>
        </div>
    )
}

第三(内部效应):

import { useEffect } from "react";
export default function App() {  
    useEffect(() => {/* Some javascript code */}, [])
    return (
        <div>
            <p>I am a paragraph</p>
        </div>
    )
}

我不知道这是否会改变答案,但我真正的javascript代码是:

//This is a simple code to display the window width
import { useState, useEffect } from "react";
export default function Example() {

    const [width, setWidth] = useState(window.innerWidth)

    useEffect(() => {
        window.addEventListener('resize', () => setWidth(window.innerWidth) )
    }, [])

    return <p>{width}</p>
}
dwbf0jvd

dwbf0jvd1#

第一个(内部) return )第二(之前) return )示例具有相同的效果:代码在第一次渲染和每次重新渲染时运行。
在第三层(内部) useEffect )例如,代码仅在第一次渲染时运行一次。 useEffect 对于空的依赖项数组,其行为类似于基于类的组件方法 componentDidMount .
如果你需要 addEventListener 或者只在第一次渲染时从外部api获取数据,最好将它们封装在内部 useEffect .

cbwuti44

cbwuti442#

具有useeffect的选项很好,只需返回unsubscribe函数。

useEffect(() => {
    const resizeCb = () => setWidth(window.innerWidth)

    window.addEventListener('resize', resizeCb)

    return () => window.removeEventListener('resize', resizeCb)
}, [])

相关问题