首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用效果路由器之前触发react appjs

在使用效果路由器之前触发react appjs
EN

Stack Overflow用户
提问于 2020-05-30 00:32:44
回答 1查看 202关注 0票数 0

我有一个问题,我如何在路由器之前触发我的appjs文件中的useeffect方法

首先,怎样才能在app js中使用效果触发器?

Appjs文件

代码语言:javascript
复制
import GlobalContext from "./context/globalContext";
import Routers from "./router/index"
function App() {
    const {initAuth} = useContext(GlobalContext)
    alert("appjs")
    useEffect(() => {
        alert("appJS Use Effect")
        initAuth()
    }, [])
    return (
        <React.Fragment>
                <Routers/>
        </React.Fragment>
    );
}
export default App;

我的路由器

代码语言:javascript
复制
export default function Routers() {
    alert("RoutersJS")
    useEffect(()=>{
        alert("useEffect RouterJS")
    },[])
    return (
        <Router>
             ....
       </Router>

    )
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-30 00:51:27

Yousaf是正确的,你不能直接这样做,也不能改变渲染的顺序。如果有一个副作用,绝对必须在两个元素之间正确排序,你可以创建一个道具到路由器,告诉它什么时候允许它产生副作用。

这引入了这些元素之间的大量耦合,除非您绝对需要这两个元素产生必须排序的副作用,否则我不建议这样做。

代码语言:javascript
复制
function App() {
    ...
    const [hasAlerted, setHasAlerted] = useState(false);
    useEffect(() => {
        alert("appJS Use Effect");
        initAuth();
        setHasAlerted(true);
    }, [])
    return (
        <React.Fragment>
                <Routers canAlert={hasAlerted} />
        </React.Fragment>
    );
}


export default function Routers({canAlert})) {
    useEffect(()=>{
        if (canAlert) {
            alert("useEffect RouterJS")
        }
    },[canAlert])
    return (
        <Router>
             ....
       </Router>

    )
}

快速解释

在第一次渲染时,hasAlerted将为false。App将在第一次渲染后发出警报。我们将把canAlert=false传递给Routers组件,这样它就不会在第一次呈现时发出警报。

因为我们setHasAlerted(true)树将再次渲染。在第二次渲染时,hasAlerted将为true。App不会发出警报,因为它的useEffect依赖项没有更改。我们将把canAlert=true传递给Routers组件,这样它就会在第二次呈现时发出警报。

同样,如果您有能力的话,我可能会探索其他解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62090609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档