--- id: 5a24c314108439a4d4036167 challengeType: 6 forumTopicId: 301404 title: 渲染 class 组件为 Dom 树 --- ## Description
你可能还记得在早期挑战中使用 ReactDOM API 将 JSX 元素渲染到 DOM,这与渲染 React 组件的过程十分相似。过去的几个挑战主要针对组件和组合,因此渲染是在幕后为你完成的。但是,如果不调用 ReactDOM API,你编写的任何 React 代码都不会渲染到 DOM。 以下是语法的复习:ReactDOM.render(componentToRender, targetNode)。第一个参数是要渲染的 React 组件。第二个参数是要在其中渲染该组件的 DOM 节点。 React 组件传递到ReactDOM.render()与 JSX 元素略有不同。对于 JSX 元素,你传入的是要渲染的元素的名称。但是,对于 React 组件,你需要使用与渲染嵌套组件相同的语法,例如ReactDOM.render(<ComponentToRender />, targetNode)。你可以将此语法用于ES6类组件和函数组件。
## Instructions
在后台为你定义了FruitsVegetables组件。将两个组件渲染为TypesOfFood组件的子组件,然后将TypesOfFood渲染到 DOM 节点,在这个挑战中,请渲染到 id 为challenge-nodediv中。
## Tests
```yml tests: - text: TypesOfFood组件应该返回单个div元素。 testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood)); return mockedComponent.children().type() === 'div'; })()); - text: TypesOfFood组件应该在h1元素之后渲染Fruits组件。 testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood)); return mockedComponent.children().childAt(1).name() === 'Fruits'; })()); - text: TypesOfFood组件应该在Fruits组件之后渲染Vegetables组件。 testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(TypesOfFood)); return mockedComponent.children().childAt(2).name() === 'Vegetables'; })()); - text: TypesOfFood组件应该渲染到 id 为challenge-nodediv中。 testString: assert((function() { const html = document.getElementById('challenge-node').childNodes[0].innerHTML; return html.includes('

Fruits:

Non-Citrus:

Citrus:

') && html.includes('

Vegetables:

'); })()); ```
## Challenge Seed
```jsx class TypesOfFood extends React.Component { constructor(props) { super(props); } render() { return (

Types of Food:

{/* change code below this line */} {/* change code above this line */}
); } }; // change code below this line ```
### Before Test
```jsx const Fruits = () => { return (

Fruits:

Non-Citrus:

  • Apples
  • Blueberries
  • Strawberries
  • Bananas

Citrus:

  • Lemon
  • Lime
  • Orange
  • Grapefruit
); }; const Vegetables = () => { return (

Vegetables:

  • Brussel Sprouts
  • Broccoli
  • Squash
); }; ```
## Solution
```js class TypesOfFood extends React.Component { constructor(props) { super(props); } render() { return (

Types of Food:

{/* change code below this line */} {/* change code above this line */}
); } }; // change code below this line ReactDOM.render(, document.getElementById('challenge-node')); ```