首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此子组件封装在较高的组件中?

如何将此子组件封装在较高的组件中?
EN

Stack Overflow用户
提问于 2019-10-02 22:09:33
回答 3查看 651关注 0票数 2
代码语言:javascript
复制
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却不行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-02 23:02:03

HOCs获取一个组件并返回另一个组件。您正在获取一个组件并返回一个React节点,而不是一个组件。文档参考

在你的例子中,你应该能够做如下的事情:

代码语言:javascript
复制
const withAuth = (Component) => (props) => <AuthRequired><Component ...props /></AuthRequired>

它可能更容易理解为:

代码语言:javascript
复制
function withAuth(Component) {
    return function WithAuthHOC(props) {
        return (
            <AuthRequired>
                <Component ...props />
            </AuthRequired>
        );
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-10-02 23:23:42

您可以使用辅助组件。它是一个高阶组件。辅助元素并不具有语义意义,而是为了分组元素、样式等而存在。只需创建一个名为Aux.js的组件并将其放在上面:

代码语言:javascript
复制
const aux = ( props ) => props.children;

export default aux;

然后用Aux包装withAuth

代码语言:javascript
复制
const withAuth = (component) => {
     return ( 
           <Aux> 
               <AuthRequired>{ component }</AuthRequired>
           </Aux> 
      );
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-02 22:54:35

正如我所知,你不能返回一个函数作为儿童的反应。你试试这个怎么样?

代码语言:javascript
复制
const LoggedInView = <div>You are logged in!</div>;

当我在笔记本电脑上试用时,这段代码就能工作了。

请看一下这个链接:函数作为React子函数无效。如果返回组件而不是呈现,则可能会发生这种情况。

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

https://stackoverflow.com/questions/58209966

复制
相关文章

相似问题

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