Стилизованный компонент вызывает нежелательную визуализацию - PullRequest
2 голосов
/ 26 марта 2019

У меня есть приложение, которое выглядит так

class App extends Component {
  state = {
    config: {}
  };
  submitForm(formData) {
    this.setState({
          config: newConfig(formData)
    });
  }

  render() {
    return (
      <div className="App">
        <Form submit={formData => this.submitForm(formData)} />
        <Body config={this.state.config} />
      </div>
    );
  }
}

function Form(props) {
  const QueryBox = styled.div`
    background-color: #1080f2;
    padding: 1em;
  `;

  return (
    <QueryBox>
      <MyForm submit={props.submit} />
    </QueryBox>
  );
}

class MyForm extends React.Component {

  ...

}

Теперь моя проблема в том, что стилизованный div заставляет компонент MyForm перерисовываться при каждом изменении состояния компонента App.

Почему это так? Является ли это ожидаемым поведением (это сделало бы стилизованные компоненты непригодными для меня). И есть ли способ изменить это?

1 Ответ

3 голосов
/ 26 марта 2019

Ваш QueryBox будет совершенно новым компонентом для каждого рендера Form. Вместо этого переместите его за пределы Form, и он будет работать как положено.

const QueryBox = styled.div`
  background-color: #1080f2;
  padding: 1em;
`;

function Form(props) {
  return (
    <QueryBox>
      <MyForm submit={props.submit} />
    </QueryBox>
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...