为什么即使可以避免,React也会提供props.children?

时间:2018-03-09 09:25:59

标签: reactjs

儿童道具的确切反应如何?

下面的示例组件将在someArray迭代时使用NPE失败,当它为null时。 Wrapper组件背后的理念是在没有数据时保护案例 - 这里我只是显示消息'工作......'但通常它可以扩展到任何东西,例如微调器或进度条。此外,在此示例中,即使我将其修复为:

{someArray && someArray.map((arrayValue) => <li>{arrayValue}</li>)}

如果someArray为null,则会在Wrapper内部进行不必要的渲染,这不是很聪明。

我认为问题是总是呈现Wrapper组件的子项,即使它可以跳过它。什么能阻止儿童作为一种功能,而不是按要求呈现内容?

const Demo = () => {
    const someArray = null; // will fail with NPE
    //const someArray = ['aaa', 'bbb', 'ccc']; // will render content

    return(
        <Wrapper isWorking={someArray === null}>
            <h1>Inside</h1>
            <ul>
                {someArray.map((arrayValue) => <li>{arrayValue}</li>)}
            </ul>
        </Wrapper>
    );
}

const Wrapper = ({ isWorking, children }) => {
    if( isWorking ){
        return <div>working...</div>
    }else{
        return <div>{children}</div>
    }
}

0 个答案:

没有答案