Как передать реквизит в .сопоставленные элементы со styled-components?

#javascript #css #reactjs #styled-components

#javascript #css #reactjs #styled-components

Вопрос:

Я бил головой об стену с этим, и я не могу понять, в чем здесь проблема. Я извлекаю некоторые данные из API. Это простой объект, который содержит имя пользователя, оценку и isOwner, что в основном является информацией, если имя пользователя равно текущему зарегистрированному пользователю. Теперь, если значение isOwner равно true, я хочу изменить стиль этой позиции li по-другому. Итак, допустим, так выглядит моя карта:

 const List = myData.map((el, i) => (
    <li key={el.name} isowner={el.isOwner ? 1 : 0}>
      {i   1}. {el.name}
      <span>{el.score}</span>
    </li>
  ));
  

Таким образом, каждый элемент li генерируется в стилизованном компоненте ul.
Теперь, глядя на список styled component, он выглядит так:

 export const ScoreList = styled.ul`
  width: 80%;
  display: flex;
  flex-direction: column;

  li {
    border: ${props =>
      props.isowner === 1 ? '2px solid yellow' : '1px solid black'};
    border-radius: 5px;
  }`
  

по какой-то причине он игнорирует значение isowner и отображает все с черной рамкой.

Теперь, глядя на инструменты разработчика Chrome, я заметил кое-что странное.

 <li isowner="1">...</li>
<li isowner="0">...</li>
<li isowner="0">...</li>
  

Я вижу, что «prop» помещается туда вот так, чего я не могу заметить в любом другом случае, когда я передаю props. Похоже, что логика работает хорошо, но она просто не видит элемент как реквизит.

Кроме того, я использую isowner вместо isOwner, потому что в противном случае я получаю следующее предупреждение:

 React does not recognize the `isOwner` prop on a DOM element. 
If you intentionally want it to appear in the DOM as a custom attribute, 
spell it as lowercase `isowner` instead. 
If you accidentally passed it from a parent component, remove it from the DOM element.
  

Я пробовал разные методы, вместо isOwner я сравнивал el.name с именем пользователя, которое я мог использовать из redux, результаты были теми же, я получил «1» или «true» именно там, где мне это было нужно, но я просто не смог передать его дальше.

Я был бы очень, очень благодарен, если у кого-нибудь из вас есть идея о том, как с этим справиться.

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

1. вы неправильно используете styled component… вам нужно создать другую константу Li = styled.li<...> , а затем получить доступ к реквизиту там…

2. большое вам спасибо, я довольно новичок в стилизованных компонентах, и я устал от всего, кроме фактического превращения элемента списка в компонент… глупая ошибка с моей стороны. Теперь он работает 🙂

Ответ №1:

это может вам помочь:

 export const ScoreLi = styled.li`

border: ${props =>
  props.isowner === 1 ? '2px solid yellow' : '1px solid black'};
border-radius: 5px;`



const List = myData.map((el, i) => (
<ScoreLi key={el.name} isowner={el.isOwner ? 1 : 0}>
  {i   1}. {el.name}
  <span>{el.score}</span>
</ScoreLi>
));