素材牛VIP会员
请教一下react的组件问题
 yi***14  分类:JavaScript  人气:1012  回帖:2  发布于6年前 收藏

请问怎么理解这句话,在react如何实现?

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv5 码农
轻***却 交互设计师 6年前#1

刚开始没看明白,以为讲的是业务组件的事情。去搜了文章看才明白怎么回事。

文章来自知乎,题主以后类似问题可以在题目中注明
https://zhuanlan.zhihu.com/p/...

这篇文章讲的是组件库的设计,全文有一个很明确的观点,即组件库应该给使用者足够高的自由度,以避免组件与外部的耦合,提高组件的灵活性。红圈这里的回调并不是指一般意义上的请求或者事件的回调函数,而是指组件渲染的回调函数,通常组件提供这类回调时为了让使用者声明组件具体的渲染方式,以及数据的处理逻辑。

有一个很好的例子是antdTable组件,该组件提供了一个展开单行表格的功能。这里展开的内容就是通过回调函数来声明的。回调函数提供每一行的数据(即红圈处整个对象),由使用者负责处理数据,并返回一个DOM结构。组件在实际渲染时,会循环调用这个回调函数,将返回的DOM结构作为展开行的实际内容渲染。

如此一来,antd并不关心你传入数据的结构或者属性名,因此实现了和后端,也就是数据源的解耦

import { Table } from 'antd';

const columns = [
  { title: 'Name', dataIndex: 'name', key: 'name' },
  { title: 'Age', dataIndex: 'age', key: 'age' },
  { title: 'Address', dataIndex: 'address', key: 'address' },
  { title: 'Action', dataIndex: '', key: 'x', render: () => <a href="#">Delete</a> },
];

const data = [
  { key: 1, name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', description: 'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.' },
  { key: 2, name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', description: 'My name is Jim Green, I am 42 years old, living in London No. 1 Lake Park.' },
  { key: 3, name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park', description: 'My name is Joe Black, I am 32 years old, living in Sidney No. 1 Lake Park.' },
];

ReactDOM.render(
  <Table
    columns={columns}
    expandedRowRender={record => <p style={{ margin: 0 }}>{record.description}</p>}
    dataSource={data}
  />
, mountNode);

可展开的组件

Lv1 新人
qq***22 职业无 2年前#2
学习了,谢谢分享
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取