gpt4 book ai didi

javascript - 为什么 {...rest} 可以用在属性中

转载 作者:行者123 更新时间:2023-11-29 17:41:07 28 4
gpt4 key购买 nike

我只是想知道为什么可以在参数中使用 {...rest} 缩短以下原始代码并在属性中展开,正如您在简化代码中看到的那样。

在简化代码中,它使用 {...rest} spread 来生成 value={value} onChange={onChange} type={type}。我不确定这怎么可能。

原始代码

import React from "react";

const Input = ({ type, name, label, error, value, onChange }) => {
return (
<div className="form-group">
<label htmlFor={name}>{label}</label>
<input
value={value}
onChange={onChange}
type={type}
name={name}
id={name}
className="form-control" />
{error && <div className="alert alert-danger">{error}</div>}
</div>
);
};

export default Input;

简化代码

import React from "react";

const Input = ({ name, label, error, ...rest }) => {
return (
<div className="form-group">
<label htmlFor={name}>{label}</label>
<input {...rest} name={name} id={name} className="form-control" />
{error && <div className="alert alert-danger">{error}</div>}
</div>
);
};

export default Input;

最佳答案

...rest用于将所有未解构的属性放在一个单独的对象中。

const obj = {
name: 'name',
label: 'label',
error: 'error',
foo: 'foo',
bar: 'bar'
};
const { name, label, error, ...rest } = obj;

console.log(rest);

rest 对象然后用于 spread syntax将对象中的每个属性作为单独的 Prop 传递。如果您将 JSX 编写为已编译的 React.createElement 调用,可能会更容易理解为什么会这样。

React.createElement("input", {
name: name,
id: name,
className: "form-control",
...rest
});

const obj = {
name: 'name',
label: 'label',
error: 'error',
foo: 'foo',
bar: 'bar'
};
const { name, label, error, ...rest } = obj;
const result = {
name: name,
id: name,
className: "form-control",
...rest
};

console.log(result);

关于javascript - 为什么 {...rest} 可以用在属性中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com