Reactjs 在呈现组件之前,是否会发出警告?
我有一个组件,它环绕其他组件,并在加载所有必要的数据后有条件地呈现它们。然而,我得到了proptype错误——按照Reactjs 在呈现组件之前,是否会发出警告?,reactjs,react-redux,react-proptypes,Reactjs,React Redux,React Proptypes,我有一个组件,它环绕其他组件,并在加载所有必要的数据后有条件地呈现它们。然而,我得到了proptype错误——按照的思路,prop x在组件Y中被标记为必需的,但其值未定义prop x是尚未从服务器返回的数据,component Y是数据返回时将渲染的子组件 下面是我所说的一个例子: <Wrapper contentLoaded={hasDataLoaded && !!dataThatWillLoad}> <ComponentWithData dat
的思路,prop x在组件Y中被标记为必需的,但其值未定义prop x
是尚未从服务器返回的数据,component Y
是数据返回时将渲染的子组件
下面是我所说的一个例子:
<Wrapper contentLoaded={hasDataLoaded && !!dataThatWillLoad}>
<ComponentWithData
dataThatWillLoad={dataThatWillLoad}
dataThatAlreadyExists={dataThatAlreadyExists}
/>
</Wrapper>
和我的包装器组件:
const Wrapper = ({ contentLoaded, children }) => {
if (contentLoaded) return children;
return <p>Loading</p>;
}
const包装器=({contentLoaded,children})=>{
if(contentLoaded)返回子项;
返回加载;
}
这将产生错误Prop datawillload在ComponentWithData中标记为必需,但其值未定义
这对我来说似乎很奇怪,因为在数据返回之前,ComponentWithData
甚至都不会被渲染。这是否与检查PropType时有关?这段特定的数据是通过mapStateToProps进入组件的,这可能与此有关吗
谢谢 按照你的写作方式,孩子们总是会被创造出来,导致你的问题。通过无条件地将它们作为子对象添加到包装器组件中,React将在将它们添加到子对象之前使它们生效。另一种方法是使用组件本身向包装器添加一个道具。您可以在React路由器提供的路由
组件中看到这方面的示例:
使用此设计模式,您应该能够跳过渲染,只在加载道具时渲染组件,不加载道具时加载单独的组件
编辑:TLDR:按照您的设置方式,ComponentWithData
组件在作为孩子交给包装器之前会被创建并提供道具。哦,这真的很酷。我不知道组件的存在会在组件生命周期开始时影响外部的proptype。你知道的越多。谢谢