Реакция — изменение цвета фона повторно используемого компонента

#css #reactjs

#css #reactjs

Вопрос:

Я новичок в React, и я пытаюсь использовать компонент несколько раз на странице с другим цветом фона каждый раз, когда я его использую. Я попробовал приведенный ниже код (который не изменяет цвет фона) и не смог найти ничего полезного в Интернете. Кто-нибудь знает, как это сделать?

Компонент, о котором я говорю, — это «Раздел»

Главная страница:

 function App() {
  return (
    <div className="App">
      <Navbar />
      <h1 id="mainTitle">My website</h1>
      <h1 id="subTitle">a cool new website</h1>
      <Section style={{backgroundColor: "red"}}/>
      <Section style={{ backgroundColor: "blue"}}/>
    </div>

  );
}
  

Компонент CSS:

 .section{
  text-align: left;
  font-size: large;
  padding: 30px;
  margin-top: 30px;
  margin-bottom: 30px;
}
  

Компонент JS:

 import './Section.css';

function Section() {
    return (
        <div class="section">
            <p>Text example</p>
            <p>
            <ul>
                <li>item 1</li>
                <li>item 2</li>
            </ul>
            </p>
        </div>
    );
}

export default Section;
  

Комментарии:

1. Это не может изменить цвет фона каждый раз.

Ответ №1:

Согласно вашему вопросу, вы не понимаете JSX.

JSX — это не HTML. Это означает, что когда вы пишете <something> , Babel компилятор определяет, хотите ли вы создать HTML-элемент или отобразить компонент. Вот почему все компоненты должны быть заглавными буквами (компилятор должен найти разницу).

В вашем случае

<Section> — вы просите отобразить раздел компонента с реквизитами style (отправьте реквизит дочернему элементу).

<div class="section"> — вы просите отобразить HTML-элемент с помощью класса arrtibute.

Решение: вам нужно добавить style в div , вот так:

 function Section(props) {
  return (
    <div style={props.style} className="section">
      <p>Text example</p>
      <ul>
        <li>item 1</li>
        <li>item 2</li>
      </ul>
    </div>
  );
}
  

Лучшее решение:

 function Section(props) {
 return (
   <div {...props} className="section">
     <p>Text example</p>
     <ul>
       <li>item 1</li>
       <li>item 2</li>
     </ul>
   </div>
 );
}
  

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

Полный код: https://codesandbox.io/s/hopeful-brown-xmtzy?file=/src/Section.js:27-219