我目前正在将React应用程序迁移到Typescript。到目前为止,它工作得很好,但是我的render
函数的返回类型(分别是函数组件)有一个问题。
到目前为止,我一直使用jsx.element
作为返回类型,现在如果组件决定不呈现任何内容,也就是返回null
,这就不再起作用了,因为null
不是jsx.element
的有效值。这是我旅程的开始,因为现在我搜索了web并发现应该使用reactnode
,其中还包括null
以及其他一些可能发生的事情。这似乎是更好的赌注。
jsx.element
、reactnode
和reactelement
有什么区别?render
方法返回reactnode
,而函数组件返回reactelement
?null
?Element、ReactNode和ReactElement之间有什么区别?
ReactElement是具有类型和道具的对象。
type Key = string | number
interface ReactElement<P = any, T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>> {
type: T;
props: P;
key: Key | null;
}
ReactNode是ReactElement、ReactFragment、string、number或ReactNodes的数组,或者null、undefined或者boolean:
type ReactText = string | number;
type ReactChild = ReactElement | ReactText;
interface ReactNodeArray extends Array<ReactNode> {}
type ReactFragment = {} | ReactNodeArray;
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
declare global {
namespace JSX {
interface Element extends React.ReactElement<any, any> { }
}
}
举例说明:
<p> // <- ReactElement = JSX.Element
<Custom> // <- ReactElement = JSX.Element
{true && "test"} // <- ReactNode
</Custom>
</p>
为什么类组件的呈现方法返回ReactNode,而函数组件返回ReactElement?
事实上,他们确实返回了不同的东西。组件
返回:
render(): ReactNode;
interface StatelessComponent<P = {}> {
(props: P & { children?: ReactNode }, context?: any): ReactElement | null;
// ... doesn't matter
}
类型源
问题内容: 我目前正在将React应用程序迁移到TypeScript。到目前为止,这很好,但是我分别对函数的返回类型和函数组件有问题。 到目前为止,我一直用作返回类型,现在如果组件决定 不 呈现任何内容(即return),则此方法将不再起作用,因为没有有效的值。这是我旅程的开始,因为现在我在网上搜索并发现您应该使用它,它还包括可能发生的其他一些事情。这似乎是更好的选择。 但是,现在在创建功能组件时
我不是在问这里已经问过的问题:@PathParam和@QueryParam之间有什么区别 这是一个“最佳做法”或惯例问题。 何时使用和。 我能想到的是,这个决定可能是利用这两者来区分信息模式。让我在下面举例说明我的LTPO-不够完美的观察。 PathParam的使用可以保留给information category,它很好地属于information Tree的一个分支。PathParam可用于向
我一直在研究如何将Spring与REST结合使用的各种示例。我们的最终目标是Spring设置 我已经看到了两种不同的方法,用于在Spring中渲染REST > 在控制器中通过 通过存储库中的< code > @ RepositoryRestResource 我正在努力寻找的是,为什么你会使用一个而不是另一个。当尝试实施时,哪一个是最好的? 我们的数据库后端是Neo4j。
我想了解更多这句话发现Grails留档: 如果测试涉及证明测试对象以特定方式与合作者交互,则使用模拟。如果协作者以某种方式的行为暴露了测试主题中的特定行为,那么该行为的结果就是您正在测试的,请使用存根
问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,
问题内容: 我正在阅读各种IPC机制。我试图弄清楚使用共享内存和使用命名管道(FIFO)的方案。 管道:可以写入多个进程,但是只能读取一个进程。写操作是原子的。 共享内存:可以读写多个进程。用户还需要提供读写互斥功能。 这是共享内存和管道应用程序的唯一区别吗? 问题答案: 本质上,管道(无论是命名管道还是匿名管道)都像消息传递一样使用。有人将一条信息发送给收件人,收件人可以接收它。共享内存更像是发