我有ProductList
组件
import Title from "./Title";
class ProductList extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
return <Title name="Our" title="Products" />;
}
}
和Title
组件,该组件将导出,然后在ProductList
组件中使用。
class Title extends Component {
constructor(title, name) {
super();
this.title = title;
this.name = name;
}
render() {
return (
<div className="product-title">
{this.name} <strong>{this.title}</strong>
</div>
);
}
}
但是我无法渲染title
和name
。
此外,还有一个问题,如果我将基于类的组件编写为基于函数的组件,我们需要这样做function Title({ name, title })
,为什么我们需要括号{}来包装name
和{{1} } 那里?
答案 0 :(得分:5)
props
在this.props
内部可用于基于类的组件。您在这里不需要constructor
class Title extends Component {
render() {
const {name, title } = this.props
return (
<div className="product-title">
{name} <strong>{title}</strong>
</div>
);
}
}
如果我将基于类的组件编写为基于函数的组件,我们 需要这样做
function Title({ name, title })
为什么我们需要 在其中包裹名称和标题的方括号?
这是一种称为destructuring assignment的模式,可以将数组中的值或对象中的属性解压缩为不同的变量
您可以传递object
作为参数,并且仅在函数体内或直接在声明中对其进行破坏
const user = {name: 'John', surname: 'Doe'}
logUser(user)
const logUser = user =>{
const { name, surname } = user
console.log(name, surname)
}
等同于
const logUser = ({ name, surname }) => console.log(name, user)
由于功能组件收到的唯一参数是props
,因此可以像这样传递它
<Child foo='bar' />
直接从props
对象中解构参数
const Child = ({ foo }) => <span> {foo} </span>