- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看看这个 React Router Dom v4 示例 https://reacttraining.com/react-router/web/example/auth-workflow我看到 PrivateRoute 组件像这样解构了休息 Prop
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
我想确定 { component: Component, ...rest }
的意思是:
From
props
, get the Component prop and then all other props are given to you, and renameprops
torest
so you can avoid naming issues with the props passed to the Routerender
function
我说得对吗?
最佳答案
抱歉,我意识到我的第一个答案(虽然希望仍然提供有用/额外的上下文)并不能回答您的问题。让我再试一次。
你问:
I want to be certain that
{ component: Component, ...rest }
means:From
props
, get theComponent
prop and then all otherprops
given toyou, and renameprops
torest
so you can avoid naming issues with theprops
passed to the Routerender
function
你的解释不太正确。不过,根据您的想法,听起来您至少意识到这里发生的事情相当于某种object destructuring (请参阅第二个答案和评论以获取更多说明)。
为了给出准确的解释,我们来分解一下 { component: Component, ...rest }
表达式分成两个单独的操作:
component
属性定义于 props
(注意:小写 component)并将其分配到我们称为 Component
的状态中的新位置。 (注意:大写C组件)。props
上定义的所有剩余属性。对象并将它们收集在名为 rest
的参数中.重要的一点是您没有重命名 props
至rest
。 (这也与尝试“避免传递给路由 props
函数的 render
的命名问题”无关。)
rest === props;
// => false
您只需提取 props
上定义的属性的其余部分(这就是为什么参数如此命名的原因)对象放入名为 rest
的新参数中.
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
对于此示例,考虑 props
可能会有所帮助。具有相同的结构(即属性和值),如 myObj
所示。现在,让我们编写以下作业。
const { name: Username, ...rest } = myObj
上面的语句相当于两个变量(或者我猜是常量)的声明和赋值。该语句可以被认为是:
Take property
name
defined onmyObj
and assign its value to a newvariable we callUsername
. Then, take whatever other properties weredefined onmyObj
(i.e.,age
,sex
anddob
) and collect theminto a new object assigned to the variable we namerest
.
记录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) }
<小时/>
Why go through the trouble of pulling off the
component
propertyonly to rename itComponent
with a capital letter "C"?
是的,看起来很微不足道。而且,虽然这是标准的 React 实践,但 Facebook's documentation 是有原因的。其框架上是这样写的。也就是说,利用 JSX 渲染的自定义组件本身与其说是一种实践,不如说是一种必要。 react ,或更准确地说,JSX is case-sensitive 。插入的首字母不大写的自定义组件不会呈现到 DOM。这正是 React 定义自身来识别自定义组件的方式。因此,如果该示例没有另外重命名为 component
被夺走的属性(property) props
至Component
,<component {...props} />
表达式将无法正确渲染。
关于javascript - React JSX 中的 ...rest 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43484302/
typescript 抛出: Cannot use JSX unless the '--jsx' flag is provided.ts(17004) 更改后tsconfig.json jsx至 re
我正在尝试使用 JSX 表达式作为另一个 JSX 表达式的生成主体的一部分: render() { return ( {[...Array(5).keys()].
eslint jsx-quotes 规则在 Visual Studio 代码中不起作用。配置: .eslintrc.json: { "plugins": ["jsx"], "parse
如果我声明 var A = new Set(...........); var B = new Set(...........); 是否有 JSX 操作来计算两组 A - B 的差异? 最佳答案
这个问题在这里已经有了答案: How to render react components by using map and join? (18 个答案) 关闭 5 年前。 我遇到过这样的情况,我有
完成执行另一个 .jsx 脚本后,如何让我的 .jsx 脚本? 也许这将有助于理解我正在尝试做的事情: // WebCard.jsx file function mySnippet(){ //
JSX 不允许多次指定一个属性。 F.ex. /* /* where obj contains an attribute called "prop1" */ 属性的顺
我在尝试使用循环数组构建自定义组件时遇到问题,该循环数组有条件地呈现不同的元素。该组件包含特殊的类名,用于生成每行 3 个元素的网格,与传递给组件的参数数量无关。 我正在使用 map用于遍历条件索引,
我有一个要从 JS 转换为 TS 的 React 项目。我遇到的一个问题是 TSX React 假设功能组件中定义的所有属性都是必需的 Prop 。 // ComponentA.tsx class C
我有一个通过数组映射的 React 组件。 每个数组项都有一个可选的 ID 类型。 如果我有这个 ID,我将渲染一个元素,否则什么都不渲染。 这个元素有一个 onClick 调用函数接受 ID 作为参
我目前正在编写一个带有 ref 元素的 StencilJS 组件,我需要将其作为 @Prop 传递给另一个元素。像这样: this.canvas = el}> 创建颜色选择器时,this.canv
我正在尝试将对象传递给 react 中的 jsx 标记的值 我将标签选项的值设置为一个对象 onChange 我得到了标签 中的值并用值设置本地状态 我控制台记录了本地状态,但它返回了 [objec
我正在尝试使用 Chart.js 和 Typescript 在 React 中构建应用程序,但是当尝试渲染折线图时,我在这一行收到上述错误: . 除此之外,我还收到消息“类型‘ChartCompone
我正在使用一个变量来有条件地显示不同的 JSX,并且它没有使用在其父函数中定义的样式。我怎样才能做到这一点? 您可以在此处查看演示:https://codesandbox.io/s/styled-js
使用 Nextjs 和 styled-jsx 我编写了下面的组件。 现在我想知道如何将 styled-jsx 应用于从 getLinks 方法返回的 jsx。 在下面的示例中,来自 getLinks
所以我现在的问题是,如果我有一个 JSX 父组件,但我需要包含一个 html 标签,例如 我认为 React JSX 不支持它(如果我错了请纠正我)我可以混合使用 jsx 和非 jsx 组件吗?我个人
我正在编写一个 react 应用程序来从嵌套对象数组中打印 TreeView 。每个节点都应该是可折叠的(默认打开)。一个节点可以有任意数量的子节点。这是我想要实现的示例: 我正在将所有节点组件收集到
它不是 React 项目,也不是 V-DOM 相关的。我只需要一个 jsx 运行时编译器到 (HTML/XML) 字符串,稍后将用作 element.innerHTML = result 它应该用作支
当 jsx 跨越多行时,哪种 eslint 规则更喜欢前者而不是后者?目前 prettier 正在从 preferred 变为 notPreferred const preferred = (
我正在使用 IDEA 2017.2。我需要设置 JSX codestyle,这样大括号之间就有空格,比如 { event.series } 。但是,它会将其自动格式化为 {event.series}
我是一名优秀的程序员,十分优秀!