const LoggedInView = (props) => <Text>You are logged in!</Text>
export default withAuth(LoggedInView)
const withAuth = (component) => <AuthRequired>{ component }</AuthRequired>
const AuthRequired = (props) => {
const context = useContext(AuthContext)
if(!context.auth){
return (
<View style={styles.container}>
<Text>You need to login . Click here</Text>
</View>
)
}
return props.children
}我的<AuthRequired>视图工作得很好,但我的withAuth却不行。
发布于 2019-10-02 23:02:03
HOCs获取一个组件并返回另一个组件。您正在获取一个组件并返回一个React节点,而不是一个组件。文档参考
在你的例子中,你应该能够做如下的事情:
const withAuth = (Component) => (props) => <AuthRequired><Component ...props /></AuthRequired>它可能更容易理解为:
function withAuth(Component) {
return function WithAuthHOC(props) {
return (
<AuthRequired>
<Component ...props />
</AuthRequired>
);
}
}发布于 2019-10-02 23:23:42
您可以使用辅助组件。它是一个高阶组件。辅助元素并不具有语义意义,而是为了分组元素、样式等而存在。只需创建一个名为Aux.js的组件并将其放在上面:
const aux = ( props ) => props.children;
export default aux;然后用Aux包装withAuth。
const withAuth = (component) => {
return (
<Aux>
<AuthRequired>{ component }</AuthRequired>
</Aux>
);
}发布于 2019-10-02 22:54:35
正如我所知,你不能返回一个函数作为儿童的反应。你试试这个怎么样?
const LoggedInView = <div>You are logged in!</div>;当我在笔记本电脑上试用时,这段代码就能工作了。
https://stackoverflow.com/questions/58209966
复制相似问题