想了解reactjs–React.如果演示组件包含容器组件,这是不是很糟糕?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于reactui组件的相关问题,此外,我们还将为您介绍关于c–为什么
想了解reactjs – React.如果演示组件包含容器组件,这是不是很糟糕?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于reactui组件的相关问题,此外,我们还将为您介绍关于c – 为什么我会收到编译器警告,将字符串文字转换为char *,这是不是很糟糕?、C#类订阅自己发布的事件是不是很糟糕?、java – 导入未使用的包是不是很糟糕?、React 之容器组件和展示组件相分离解密的新知识。
本文目录一览:- reactjs – React.如果演示组件包含容器组件,这是不是很糟糕?(reactui组件)
- c – 为什么我会收到编译器警告,将字符串文字转换为char *,这是不是很糟糕?
- C#类订阅自己发布的事件是不是很糟糕?
- java – 导入未使用的包是不是很糟糕?
- React 之容器组件和展示组件相分离解密
reactjs – React.如果演示组件包含容器组件,这是不是很糟糕?(reactui组件)
Presentational components:
- May contain both presentational and container components** inside,and usually have some DOM markup and styles of their own.
- Have no dependencies on the rest of the app,such as Flux actions or stores.
我认为如果表示组件包含容器组件,它们将依赖于Flux或Redux(或容器组件所依赖的任何东西).
这将使表示组件难以测试和重用.
实际上测试容器组件并不困难.您可以将连接的组件设置为默认导出,但也可以将未连接的组件导出为命名导出,您可以将其用于测试,并在这些测试中手动传递道具.有关详细信息,请参阅‘Writing Tests’ part of the Redux docs的“连接组件”部分.
至于测试包含容器组件的表示组件,它不会是一个问题.浅渲染在测试中仍然可以正常工作(除非你遇到this issue).如果您需要在测试中安装组件,您始终可以将其包装在< Provider>中.具有特定于该测试的商店的组件.
编辑:这个答案特定于Redux with react-redux.其他Flux实现可能会遇到一些我不知道的困难.
c – 为什么我会收到编译器警告,将字符串文字转换为char *,这是不是很糟糕?
char* myString = "i like declaring strings like this";
我应该担心吗?这是错误的方法吗?
我需要将myString传递给一个接受char *的函数,我应该在没有这个转换的情况下正确初始化char *吗?
解决方法
functionName(const_cast<char *>("something"));
或者,如果您不想进行const转换,则可以将字符串复制到堆栈中:
char str[] = "something"; functionName(str);
C#类订阅自己发布的事件是不是很糟糕?
这对我来说听起来很合理,但是我忍不住尴尬地说,这是一个糟糕的做法,原因很简单,我总是面对这样一个问题:“为什么不执行你在事件处理程序中提供的动作在代码中触发事件?“
public class Button { public Button() { this.Click += someHandler; // bad practice? } public event EventHandler Click; public void Handleinput() { if (someInputCondition) { // Perform necessary actions here rather than // subscribing in the constructor? this.Click(this,...); } } }
订阅自己的活动有任何缺点吗?
解决方法
This sounds reasonable to me,but I can’t help the nagging feeling that it’s a poor practice,for the simple reason that I’m always faced with the question: “Why not perform the actions that you’d provide in the event handler in the code which fires the event?”
要回答这个问题,请考虑部分类场景.假设你有一个基本类型B.你运行一个自动化的工具,通过将B扩展到派生类D来装饰B.你的工具生成一个部分类,以便消费D的开发人员可以进一步自定义它.
在这种情况下,D的用户创作方希望在由D声明的事件或D的机器生成侧由D的机器生成侧提升时,D的用户创作方将要注册.
这就是我们在多年前设计VSTO时所发现的情景.事实证明,在C#中做到这一点并不困难,但是在VB中完成所有操作是相当棘手的.我相信VB已经对他们的活动订阅模式进行了一些调整,使得这更容易.
说:如果你能避免这个,我会的.如果您只是在内部订阅活动,似乎是一个坏的代码气味. C#3中的部分方法在这里有很大的帮助,因为它们使得机器生成端在用户生成的一方调用很少的通知功能变得简单而且成本低廉,而无需发布事件的麻烦.
java – 导入未使用的包是不是很糟糕?
[当然,不好可以在很多方面被客体化:速度,读取能力等]
解决方法
>对于看到可能使用或不使用的导入的代码的人来说,这可能会令人困惑.
>使用相同名称导入的多个类可能存在导入冲突.这将要求除了其中一个类似的类名称之外的所有类型都可以通过代码中的完全限定名称来引用.
由于这些原因,如果不需要import语句,并且IDE有办法自动删除未使用的导入,java将发出警告.
注意,我没有提到速度或性能变化,我认为javac足够聪明,知道不使用任何不需要的导入,因此编译后的类就像你没有导入它一样.
React 之容器组件和展示组件相分离解密
Redux 的 React 绑定库包含了 容器组件和展示组件相分离 的开发思想。明智的做法是只在最顶层组件(如路由操作)里使用 Redux。其余内部组件仅仅是展示性的,所有数据都通过 props 传入。
那么为什么需要容器组件和展示组件相分离呢?
这里有个基本原则:容器组件仅仅做数据提取,然后渲染对应的子组件,记住这个点,Trust me!
看下面这个展示列表的例子,不区分容器和展示组件的情况
// CommentList.js class CommentList extends React.Component { constructor() { super(); this.state = { comments: [] } } componentDidMount() { $.ajax({ url: "/my-comments.json",dataType: 'json',success: function(comments) { this.setState({comments: comments}); }.bind(this) }); } render() { return <ul> {this.state.comments.map(renderComment)} </ul>; } renderComment({body,author}) { return <li>{body}—{author}</li>; } }
可用性:CommentList不可以复用
数据结构:组件应该对所需要的数据有所预期,但这里其实没有,PropTypes可以很好的做到这一点
那么来看下分离的情况:
// CommentListContainer.js class CommentListContainer extends React.Component { constructor() { super(); this.state = { comments: [] } } componentDidMount() { $.ajax({ url: "/my-comments.json",success: function(comments) { this.setState({comments: comments}); }.bind(this) }); } render() { return <CommentList comments={this.state.comments} />; } } // CommentList.js class CommentList extends React.Component { constructor(props) { super(props); } render() { return <ul> {this.props.comments.map(renderComment)} </ul>; } renderComment({body,author}) { return <li>{body}—{author}</li>; } }
这样就做到了数据提取和渲染分离,CommentList可以复用,CommentList可以设置PropTypes判断数据的可用性
来看下容器组件和展示组件的区别:
展示组件 | 容器组件 |
---|---|
关注事物的展示 | 关注事物如何工作 |
可能包含展示和容器组件,并且一般会有DOM标签和css样式 | 可能包含展示和容器组件,并且不会有DOM标签和css样式 |
常常允许通过this.props.children传递 | 提供数据和行为给容器组件或者展示组件 |
对第三方没有任何依赖,比如store 或者 flux action | 调用flux action 并且提供他们的回调给展示组件 |
不要指定数据如何加载和变化 | 作为数据源,通常采用较高阶的组件,而不是自己写,比如React Redux的connect(),Relay的createContainer(),Flux Utils的Container.create() |
仅通过属性获取数据和回调 | |
很少有自己的状态,即使有,也是自己的UI状态 | |
除非他们需要的自己的状态,生命周期,或性能优化才会被写为功能组件 |
优势:
展示和容器更好的分离,更好的理解应用程序和UI
重用性高,展示组件可以用于多个不同的state数据源
展示组件就是你的调色板,可以把他们放到单独的页面,在不影响应用程序的情况下,让设计师调整UI
迫使你分离标签,达到更高的可用性
我们今天的关于reactjs – React.如果演示组件包含容器组件,这是不是很糟糕?和reactui组件的分享已经告一段落,感谢您的关注,如果您想了解更多关于c – 为什么我会收到编译器警告,将字符串文字转换为char *,这是不是很糟糕?、C#类订阅自己发布的事件是不是很糟糕?、java – 导入未使用的包是不是很糟糕?、React 之容器组件和展示组件相分离解密的相关信息,请在本站查询。
本文标签: