--- id: 5a24c314108439a4d403616f title: Review Using Props with Stateless Functional Components challengeType: 6 isRequired: false videoUrl: '' localeTitle: Rever usando adereços com componentes funcionais sem estado --- ## Description
Exceto pelo último desafio, você passou a adotar componentes funcionais sem estado. Esses componentes agem como funções puras. Eles aceitam adereços como entrada e retornam a mesma visão toda vez que passam os mesmos adereços. Você pode estar se perguntando qual é o estado e o próximo desafio irá abordá-lo com mais detalhes. Antes disso, aqui está uma revisão da terminologia para componentes. Um componente funcional sem estado é qualquer função que você escreve que aceita props e retorna JSX. Um componente sem estado , por outro lado, é uma classe que estende o React.Component , mas não usa o estado interno (coberto no próximo desafio). Finalmente, um componente com estado é qualquer componente que mantenha seu próprio estado interno. Você pode ver componentes stateful referidos simplesmente como componentes ou componentes React. Um padrão comum é tentar minimizar o estado de estado e criar componentes funcionais sem estado sempre que possível. Isso ajuda a conter seu gerenciamento de estado em uma área específica de seu aplicativo. Por sua vez, isso melhora o desenvolvimento e a manutenção do seu aplicativo, facilitando o acompanhamento de como as alterações no estado afetam seu comportamento.
## Instructions
O editor de código tem um componente CampSite que processa um componente Camper como um filho. Defina o componente Camper e atribua a ele props padrão de { name: 'CamperBot' } . Dentro do componente Camper , renderize qualquer código que você queira, mas tenha certeza de ter um elemento p que inclua apenas o valor do name que é passado como um prop . Finalmente, defina propTypes no componente Camper para exigir que o name seja fornecido como um prop e verifique se ele é do tipo string .
## Tests
```yml tests: - text: O componente CampSite deve renderizar. testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(CampSite)); return mockedComponent.find("CampSite").length === 1; })(), "The CampSite component should render.");' - text: O componente Camper deve renderizar. testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(CampSite)); return mockedComponent.find("Camper").length === 1; })(), "The Camper component should render.");' - text: O componente Camper deve incluir props padrão que atribuem a string CamperBot ao name da chave. testString: 'getUserInput => assert((function() { const noWhiteSpace = getUserInput("index").replace(/\s/g, ""); const verify1 = "Camper.defaultProps={name:\"CamperBot\"}"; const verify2 = "Camper.defaultProps={name:"CamperBot"}"; return (noWhiteSpace.includes(verify1) || noWhiteSpace.includes(verify2)); })(), "The Camper component should include default props which assign the string CamperBot to the key name.");' - text: O componente Camper deve incluir tipos prop que requerem que o name prop seja do tipo string . testString: 'getUserInput => assert((function() { const mockedComponent = Enzyme.mount(React.createElement(CampSite)); const noWhiteSpace = getUserInput("index").replace(/\s/g, ""); const verifyDefaultProps = "Camper.propTypes={name:PropTypes.string.isRequired}"; return noWhiteSpace.includes(verifyDefaultProps); })(), "The Camper component should include prop types which require the name prop to be of type string.");' - text: O componente Camper deve conter um elemento p com apenas o texto do name prop. testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(CampSite)); return mockedComponent.find("p").text() === mockedComponent.find("Camper").props().name; })(), "The Camper component should contain a p element with only the text from the name prop.");' ```
## Challenge Seed
```jsx class CampSite extends React.Component { constructor(props) { super(props); } render() { return (
); } }; // change code below this line ```
### Before Test
```jsx var PropTypes = { string: { isRequired: true } }; ```
### After Test
```js console.info('after the test'); ```
## Solution
```js // solution required ```