看看这个React Router Dom v4示例https://reacttraining.com/react-
router/web/example/auth-workflow
我看到 PrivateRoute 组件像这样破坏了一个休息道具
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
我想确定这{ component: Component, ...rest }
意味着:
从中
props
获取Component属性,然后再提供所有其他属性,然后重命名props
为,rest
这样就可以避免传递给Route
render
函数的属性的命名问题
我对吗?
抱歉,我意识到我的第一个答案(虽然希望仍能提供有用的/附加的上下文)不能回答您的问题。让我再试一遍。
你问:
我想确定这
{ component: Component, ...rest }
意味着:从中
props
获取Component
道具,然后将所有其他道具props
提供给您,然后重命名props
为,rest
这样您就可以避免props
传递给Route
render
函数的命名问题
您的解释不太正确。但是根据您的想法,听起来您至少知道以下事实:某种情况下对象分解(请参阅第二个答案和评论以获取更多说明)。
为了给出准确的解释,让我们将{ component: Component, ...rest }
表达式分解为两个单独的操作:
component
上定义的属性props
( 注意 :小写 Ç omponent),并将其分配给状态我们称之为新的位置Component
( 注 :资本 Ç omponent)。props
并将它们收集在称为的参数中rest
。重要的是您不会重命名props
为rest
。(并且也与尝试“避免props
传递给Route render
函数的命名问题”有关。)
rest === props;
// => false
您只需将对象上定义的属性 的其余部分 (因此将其命名为该名称)提取props
为一个称为的新参数rest
。
这是一个例子。假设我们有一个myObj
定义如下的对象:
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
对于此示例,可能会想像一下props
具有相同的结构( 即 属性和值),可能会有所帮助myObj
。现在,让我们编写以下任务。
const { name: Username, ...rest } = myObj
上面的 声明 相当于两个变量(或者,我想是常量)的 声明 和 赋值 。该语句可以认为是:
接受
name
定义的属性,myObj
并将其值分配给我们称为的新变量Username
。然后,取中定义的任何其他属性myObj
( 即
,age
,sex
和dob
),并收集他们到分配给变量我们名称的新对象rest
。
登录Username
并rest
到console
会证实这一点。我们有以下内容:
console.log(Username);
// => John Doe
console.log(rest);
// => { age: 35, sex: 'M', dob: Mon Jan 01 1990 00:00:00 GMT-0800 (PST) }
您可能想知道:
为什么要取消
component
财产而只Component
用大写字母“ C” 重命名呢?
是的,这似乎很琐碎。而且,尽管这是标准的React惯例,但有理由将Facebook框架上的所有文档都照这样编写。也就是说,大写使用JSX渲染的自定义组件本身不是一种实践,而是一种必要。React,或更恰当地说,JSX是区分大小写的。插入的没有大写首字母的自定义组件不会呈现给DOM。这就是React定义自己以识别自定义组件的方式。因此,如果该示例没有另外重命名从中component
拉出的属性,则该表达式将无法正确呈现。props``Component``<component {...props} />
问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的
问题内容: 我有一个类似于以下的简单代码,并将其作为节点模块执行: 我知道这是默认上下文(例如在浏览器中),但是关键字指的是什么? 问题答案: (在模块的上下文中)与node.js中的相同。但是,通常应该使用/ 代替,这样可以清楚地清除正在修改的内容。
问题内容: 这个头衔看起来并不那么疯狂。我承诺!! 在研究另一个问题时,我在Stack Overflow的样式表中注意到以下内容: 这是一种奇怪的条件样式吗?这是一个错误吗?假设这不是一个错误,那么它适用于所有IE版本吗?有没有一种方法可以指定给定规则仅适用于大于(例如7)的IE版本? 我以前从未遇到过-我一直在使用条件注释来表示IE特定的样式(以及其价值,我宁愿将所有IE特定样式完全分开)。 问
问题内容: 这是什么? 这是不时出现的关于JavaScript语法的问题的集合。这也是社区Wiki, 因此邀请所有人参与维护此列表。 为什么是这样? 堆栈溢出不允许搜索特定字符。结果,在搜索运算符和其他语法标记时,不容易找到许多问题。这也使得关闭重复项变得更加困难。下面的列表可以帮助解决此问题。 主要思想是链接到Stack Overflow上的现有问题,因此我们更容易引用它们,而不是复制ECMAS
所以我有这行代码。它给了我输出[6,28]。你们知道为什么吗?我不知道有人想打印什么样的数字。
我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”