Files
freeCodeCamp/curriculum/challenges/chinese/03-front-end-libraries/react/compose-react-components.md

2.0 KiB
Raw Blame History

id, title, challengeType, forumTopicId
id title challengeType forumTopicId
5a24c314108439a4d4036166 组合 React 组件 6 301381

--description--

随着挑战继续,我们将组合使用更复杂的 React 组件和 JSX有一点需要注意。在其他组件中渲染 ES6 风格的类组件和渲染你在过去几个挑战中使用的简单组件没有什么不同。你可以在其他组件中渲染 JSX 元素、无状态功能组件和 ES6 类组件。

--instructions--

在代码编辑器中,TypesOfFood组件已经渲染了一个名为Vegetables的组件。此外,还有上次挑战中的Fruits组件。

Fruits中嵌套两个组件,首先NonCitrus,然后是Citrus,这两个组件都是在后台为你提供的。接下来,将Fruits类组件嵌到TypesOfFood组件中,位于h1标题下方和Vegetables上方。结果应该是一系列嵌套的组件,它们使用两种不同的组件类型。

--hints--

TypesOfFood组件应该返回单个div元素。

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood));
    return mockedComponent.children().type() === 'div';
  })()
);

TypesOfFood组件应该返回Fruits组件。

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood));
    return mockedComponent.children().childAt(1).name() === 'Fruits';
  })()
);

Fruits组件应该返回NonCitrus组件和Citrus组件。

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood));
    return (
      mockedComponent.find('Fruits').children().find('NonCitrus').length ===
        1 &&
      mockedComponent.find('Fruits').children().find('Citrus').length === 1
    );
  })()
);

TypesOfFood组件应该返回Vegetables组件,且其位于Fruits组件之下。

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood));
    return mockedComponent.children().childAt(2).name() === 'Vegetables';
  })()
);

--solutions--