--- id: 5a24c314108439a4d4036189 title: Change Inline CSS Conditionally Based on Component State challengeType: 6 isRequired: false videoUrl: '' localeTitle: Alterar Inline CSS Condicionalmente Baseado no Estado do Componente --- ## Description
Neste ponto, você viu vários aplicativos de renderização condicional e o uso de estilos in-line. Aqui está mais um exemplo que combina esses dois tópicos. Você também pode processar CSS condicionalmente com base no estado de um componente React. Para fazer isso, você verifica uma condição e, se essa condição for atendida, você modifica o objeto de estilos atribuído aos elementos JSX no método de renderização. Esse paradigma é importante para entender, porque é uma mudança dramática da abordagem mais tradicional de aplicar estilos modificando elementos DOM diretamente (o que é muito comum com jQuery, por exemplo). Nessa abordagem, você deve acompanhar quando os elementos são alterados e também manipular diretamente a manipulação real. Pode tornar-se difícil acompanhar as alterações, tornando a sua interface do usuário imprevisível. Quando você define um objeto de estilo com base em uma condição, descreve como a interface do usuário deve ser uma função do estado do aplicativo. Há um fluxo claro de informações que só se move em uma direção. Este é o método preferido ao escrever aplicativos com o React.
## Instructions
O editor de código possui um componente de entrada controlado simples com uma borda estilizada. Você deseja estilizar essa borda em vermelho se o usuário digitar mais de 15 caracteres de texto na caixa de entrada. Adicione uma condição para verificar isso e, se a condição for válida, defina o estilo de borda de entrada como 3px solid red . Você pode experimentá-lo digitando o texto na entrada.
## Tests
```yml tests: - text: O componente GateKeeper deve renderizar um elemento div . testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(GateKeeper)); return mockedComponent.find("div").length === 1; })(), "The GateKeeper component should render a div element.");' - text: O componente GateKeeper deve ser inicializado com uma input chave de estado configurada para uma cadeia vazia. testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(GateKeeper)); return mockedComponent.state().input === ""; })(), "The GateKeeper component should be initialized with a state key input set to an empty string.");' - text: O componente GateKeeper deve renderizar uma tag h3 e uma tag de input . testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(GateKeeper)); return mockedComponent.find("h3").length === 1 && mockedComponent.find("input").length === 1; })(), "The GateKeeper component should render an h3 tag and an input tag.");' - text: A tag de input deve inicialmente ter um estilo de 1px solid black para a propriedade da border . testString: 'assert((function() { const mockedComponent = Enzyme.mount(React.createElement(GateKeeper)); return mockedComponent.find("input").props().style.border === "1px solid black"; })(), "The input tag should initially have a style of 1px solid black for the border property.");' - text: A tag de input deve ser estilizada com uma borda de 3px solid red se o valor de entrada no estado for maior que 15 caracteres. testString: 'async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 100)); const mockedComponent = Enzyme.mount(React.createElement(GateKeeper)); const simulateChange = (el, value) => el.simulate("change", {target: {value}}); let initialStyle = mockedComponent.find("input").props().style.border; const state_1 = () => { mockedComponent.setState({input: "this is 15 char" }); return waitForIt(() => mockedComponent.find("input").props().style.border )}; const state_2 = () => { mockedComponent.setState({input: "A very long string longer than 15 characters." }); return waitForIt(() => mockedComponent.find("input").props().style.border )}; const style_1 = await state_1(); const style_2 = await state_2(); assert(initialStyle === "1px solid black" && style_1 === "1px solid black" && style_2 === "3px solid red", "The input tag should be styled with a border of 3px solid red if the input value in state is longer than 15 characters."); }; ' ```
## Challenge Seed
```jsx class GateKeeper extends React.Component { constructor(props) { super(props); this.state = { input: " }; this.handleChange = this.handleChange.bind(this); } handleChange(event) { this.setState({ input: event.target.value }) } render() { let inputStyle = { border: '1px solid black' }; // change code below this line // change code above this line return (

Don't Type Too Much:

); } }; ```
### After Test
```js console.info('after the test'); ```
## Solution
```js // solution required ```