首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Reactjs中组件的破坏性分配

理解Reactjs中组件的破坏性分配
EN

Stack Overflow用户
提问于 2019-05-13 19:15:44
回答 2查看 1.2K关注 0票数 0

我有以下反应成分:

代码语言:javascript
复制
export default function AuthExample () {
  return (
    <Router>
      <div>
        <AuthButton/>
        <ul>
          <li><Link to="/public">Public Page</Link></li>
          <li><Link to="/protected">Protected Page</Link></li>
        </ul>
        <Route path="/public" component={Public} />
        <Route path="/login" component={ Login } />
        <PrivateRoute path='/protected' component={ Protected } />
      </div>
    </Router>
  )
}

我的困难在于理解传递给组件的参数以及如何在创建此组件的函数中解封它,下面是函数:

代码语言:javascript
复制
const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route {...rest} render={(props) => (
    fakeAuth.isAuthenticated === true
      ? <Component {...props} />
      : <Redirect to={{
          pathname: '/login',
          state: { from: props.location }
        }} />
  )} />
)

那么component: Component到底是什么呢?而ES-5是破坏性分配吗?那么到底<Component {...props} />到底是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2019-05-13 19:35:58

您首先将以下两个道具传递给PrivateRoutepathcomponent。函数头({ component: Component, ...rest })的意思是,您可以将它传递给一个对象,它将使用component键查找一个属性,并将其存储为Component,其余的属性(如果有的话)将被放入rest对象中。在本例中,组件参数将是您传递的组件Protected,而rest将包含path

关于<Component {...props} />:它是对象析构,这基本上意味着,该对象中的key: value对(在您的例子中是props )将在那里登记。

因此,对于一个对象:

代码语言:javascript
复制
const myProps = {
    name: 'John',
    age: 21
}

并用作:

代码语言:javascript
复制
<MyComponent { ...myProps } />

就像你会这么做:

代码语言:javascript
复制
<MyComponent name={myProps.name} age={myProps.age} />
票数 1
EN

Stack Overflow用户

发布于 2019-05-13 19:51:13

{component: Component}确实在破坏赋值,在函数参数的上下文中也称为“理解力”

它只是在这个函数的作用域中给支柱component一个新的名称Component。JSX语法需要所有要大写的用户定义组件。(<component />不起作用。只有本机dom元素才能被小写:<span />等)

虽然语法上允许在道具名称中使用任何情况(因此您只需使用{ Component },道具的约定是使用camelCase,DOM属性和变量名遵循正常的javascript约定)。

所以您传入的道具名为component,但是在组件函数中,它是Component

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

https://stackoverflow.com/questions/56118600

复制
相关文章

相似问题

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