reactjs - 使用布局渲染组件
问题描述
我有一个布局,我在其中获取用户数据,然后是几页。在子组件的布局中使用用户数据的正确方法是什么?
这是我的主要组件
const Main = () => {
return (
<Router>
<Route path="/" exact strict component={Homepage} />
<Layout>
<Route path="/friends" exact strict component={Friends} />
<Route path="/family" exact strict component={Family} />
</Layout>
</Router>
)
}
这是布局
const Layout (props) => {
const [user, setUser] = useState({})
useEffect(() => {
getUser()
.then(setUser)
.catch(console.log('redirect to login page'))
}, [])
return(
<div>
<header>welcome {user.name}</header>
<div>{props.children}</div>
<footer>
<NavLink to="/family">Family</Navlink>
<NavLink to="/friends">Friends</Navlink>
</footer>
)
}
const Family = () => {return (<p>family</p>)}
const Friends = () => {return (<p>friends</p>)}
我不确定如何更改主组件以将这 2 个 url 路由到组件,但使用布局。
即使我在主页中,这也会渲染布局我在布局中包装朋友和家人,但它应该是相反的吗?如果我不在应该使用它的页面之一中,如何避免呈现布局?
解决方案
使用render prop
,从 child(Layout) 传入用户值并调用 Main 组件中的子项。
Switch
当您在 HomePage 上时,还可以使用一个组件来避免呈现 Layout 组件
主要部件
const Main = () => {
return (
<>
<Switch>
<Route path="/" exact strict component={Homepage} />
<Layout>
{(user) => <>
<Route path="/friends" exact strict render={(props) => <Friends {...props} user={user} />} />
<Route path="/family" exact strict render={(props) => <Family {...props} user={user} />} />
</>}
</Layout>
</Switch>
</>
)
}
布局组件
const Layout = (props) => {
const [user, setUser] = useState({})
useEffect(() => {
getUser()
.then(setUser)
.catch(console.log('redirect to login page'))
}, []);
return(
<div>
<header>welcome {user.name}</header>
<div>{props.children(user)}</div>
<footer>
<NavLink to="/family">Family</Navlink>
<NavLink to="/friends">Friends</Navlink>
</footer>
</div>)
}
推荐阅读
- php - 如果键不匹配,如何合并多个数组并插入值的总和?
- algorithm - 如何检测文本替换是否导致无限循环?
- flutter - Flutter TabBar 和 TabBarView 在应用程序的主体内
- matplotlib - 如何将下降线添加到 seaborn 散点图中?
- node.js - 如何使用 Node.js 从 DynamoDB 表中检索所有项目?
- split - 在文本文件的特定列中按每第 n 个字符拆分文本,测试新列中的等效性
- c# - 如何在 Linux 上序列化和反序列化 ECDiffieHellmanOpenSsl 的公钥?
- python - 如何将熊猫数据框转换为 3D 面板
- c++ - c++中priority_queue和sort比较器函数的使用区别
- java - 当在前一个方法中设置值时,如何修复在一种方法中返回 null 的数组?