- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面临着如何构建组件的决定,我想知道社区是否对最佳实践有任何想法。
1:封装组件以隐藏细节。
所有者渲染:
<List ... />
列表渲染:
<Item ... />
项目渲染:
<div>...</div>
在此版本中,组件的可重用性不太好,因为它们了解很多域详细信息。所有者对列表中的项目一无所知。
2:将组件嵌套在顶部、有状态 View Controller 的深处
所有者渲染:
<List>
<Item>
<div>...</div>
</Item>
</List>
在此版本中,所有者知道其子级的所有组成,但组件本身并不是很有用,因为它们对域一无所知。然而,它们更可重用。
3:将通用组件封装在特定领域组件中
这是选项 1 和选项 2 的混合
所有者渲染:
<DomainList ... />
DomainList 呈现:
<List ...>
<DomainItem .../>
</List>
DomainItem 呈现:
<Item ...>
...
</Item>
所有者对通用 List、DomainItem 或通用 Item 一无所知。
哪种方法更好?有人在这些方法中取得过成功或失败吗?发生了什么?
最佳答案
组件的可重用性并不因为它们规定了有关如何呈现的大部分内容而降低。您甚至可以说它们更具可重用性,因为使用它的组件不需要知道它如何呈现的任何信息。
当你开始思考这些事情时,很容易陷入分析瘫痪状态。我创建 React 组件的方法是:
this.props.children
用于不知道其中包含什么内容的包装器组件。一般的东西,如弹出窗口、选项卡 View 等。我倾向于看到两种不同类型的组件。通用目的的东西要么非常通用,以至于我可以在项目之间或特定于应用程序之间重用它们,但足够通用,以至于我会在应用程序的不同部分中出于不同目的大量使用它们。然后是具有非常特定用途的特定组件,例如“呈现此待办事项列表”或“呈现此表单以编辑待办事项”。这些往往使用通用组件,但绝对不是相反。
当我开始创建组件时,我通常很清楚它将属于哪种类型。对于通用组件,我倾向于使它们尽可能灵活和开放。对于特定目的的,我让它们更像黑匣子,有点像“只要给我数据,我就会从那里获取它”。因为它们具有非常具有描述性的名称,并且知道有关如何呈现自身的所有知识,所以在阅读使用它们的代码时很容易理解发生了什么。
在您的示例中,我想说 List
组件是通用组件,我肯定希望使其灵活。我可能还会有一个用于我正在构建的列表的特定组件,例如 TodoList
,可能看起来像这样:
var TodoList = React.createClass({
render() {
return (
<List>
{this.props.todos.map(todo => <ListItem>{todo.text}</ListItem>)}
</List>
);
}
});
另一种选择是这样的:
var ListItem = React.createClass({
render() {
return <li>{this.props.item.text}</li>;
}
});
var TodoList = React.createClass({
render() {
return <List items={this.state.items} listItemComponent={ListItem} />;
}
});
在本例中,List
组件会迭代所有项目,并使用传递的 listItemComponent
组件来呈现这些项目。
TL;DR
首先制作了解很多的非常具体的组件,然后当您看到要重用的用例时将它们重构为更通用。
关于reactjs - 最佳实践 : encapsulate components or compose deeply using props. child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281240/
我使用以下命令使用 Composer 删除了一个包。 composer remove sjparkinson/static-review 以上命令从 composer.json 中删除条目文件但 co
我刚刚开始使用 Composer 功能,你告诉它查看本地目录的依赖关系,这样你就可以开发一个库和一些并行使用该库的东西,而不必一直推送到 git 来更新,这是惊人的。例如 "repositories"
composer 和有什么区别和 composer.phar ? 例子: composer install composer.phar install 我一直看到使用 composer.phar 编写
阅读docker-compose -h或this official manual的帮助将为我们提供--project-directory PATH选项 docker-compose [-f ...]
我已经使用他们的安装指南在我的 Linux/Apache 服务器上的根目录(这是默认选择)中成功安装了 Composer。到目前为止,一切都非常简单,除了我必须进行的一个 php.ini 调整( de
在我的 composer.json配置文件,我有: "require": { "zendframework/zend-log" : "~2.3", }, "require-dev": {
从 Composer 安装此软件包后,我想复制位于软件包内的一些文件。 实际上,我希望在从 Composer 安装或更新软件包后,将下载的软件包中可能存在的某个文件复制到另一个目录。我用 script
我对码头公司还是个新手。我使用的是最新版本的Python、Django和Docker。我已经在这个项目上工作了两周了,我已经创建了docker-compose.yml文件,并且已经构建了我的docke
我正在尝试使用 composer 安装一个 github 项目并得到以下错误 Composer [UnexpectedValueException]您的 github.com 的 Github oau
我开发 Symfony 包的工作流程如下: 安装 Symfony 为新包创建一个 git repo,在其中放置一个 composer.json 文件 需要顶级 composer.json 中的新包,使
我正在尝试使用 composer 安装 github 项目并收到以下错误 Composer [UnexpectedValueException] 您用于 github.com 的 Github oau
我们在项目中使用了 composer。当我开发和/或向项目提交任何内容时,我通常应该使用 composer install;更新依赖项只是偶尔进行。 我们还使用 https://github.com/
我在 youtube 上学会了这个抽屉 https://www.youtube.com/watch?v=JLICaBEiJS0&list=PLQkwcJG4YTCSpJ2NLhDTHhi6XBNfk9
我知道在 onClick 中调用可组合函数是不可能的。 @Composable 调用只能在 @Composable 函数的上下文中发生 撰写版本 - alpha06 但我坚持以下要求。 要求是, 在
这是我的 docker-compose.yml 文件: version: '3.1' services: a: image: tutum/hello-world b: imag
创建Asset实例时是否有auto_increment字段类型可用。例如, Assets ID 应该是自动生成的字段,应该在运行时创建,而不是在应用程序级别提及该值。我可以通过创建一个交易处理器函数来
在 Composer 项目中,我必须添加一个库,它没有 composer.json 并且不使用命名空间。因此,我调整了项目的 composer.json 以添加库: { [...] "
当 vendor 目录中已经有一些组件被下载时.. 在上面运行 install 以及运行 update 时有什么影响? 最佳答案 所以我有同样的问题,这是我发现的: composer install
尝试运行 composer install 时出现此错误。我已经运行了 composer update,我正在尝试使用这个最新的锁定文件进行安装。没有任何帮助。 Loading composer re
当我尝试做: $ sudo php composer.phar update 我收到此警告: Warning: This development build of composer is over 3
我是一名优秀的程序员,十分优秀!