реагируйте, создавая динамические компоненты

#javascript #reactjs #ecmascript-6 #jsx

Вопрос:

У меня есть li key={Info.id} gt; Я хочу lt;divgt;{NumberStatus} lt;/divgt; вывести данные, соответствующие id значению, при нажатии на соответствующее значение идентификатора.

Таким образом, при нажатии на «один текст тега li» div выведет значение » {NumberStatus}», соответствующее «одному тексту», и {functionInfolabels} соответствующее значение.

Как бы вы хотели написать код?

   let functionInfolabels = ProductDetail amp;amp; ProductDetail.chart?.functionalsInfo?.[0].materialsInfo?.[0].ingredientsInfo?.map(array =gt; array.ingredientDisplayText);  let NumberStatus = ProductDetail amp;amp; ProductDetail.chart?.functionalsInfo?.[0].materialsInfo?.[0].ingredientsInfo?.map(array =gt; array.chartStatus)     return (  {ProductDetail amp;amp; ProductDetail.chart?.functionalsInfo?.length ?   ProductDetail.chart?.functionalsInfo.map(Info =gt; (  lt;li key={Info.id}gt;{Info.seedShapeDisplayText}lt;/ligt;  )) : lt;ligt;There is notlt;/ligt;}  // seedShapeDisplayText; // one two three four five ...   // lt;li key===1 onClick lt;divgt; Hi Number Minsu, Bar : 1 lt;/divgt; // lt;li key===2 onClick lt;divgt; Hi Number Jenny, Bar : 3 lt;/divgt; .... lt;divgt; Hi Number {NumberStatus} // one : Minsu, two : Jenny, three : Youngmin, four : Jiho ...  lt;Bar  labels={functionInfolabels} // one : 1, two: 3, three: 124 ....  /gt; lt;/divgt;   )  

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

1. Можете ли вы предоставить образец ваших данных (funcationsInfo?) До сих пор не ясно, что именно вы хотите отобразить в своем div. Кажется, что у вас есть массив объектов.

2. @Alan // Данные JSON формируются в этом формате. диаграмма: functionalInfo: Массив(5) 0: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 0: Статус диаграммы: «минсу» Ингредиентдисплейтекст:1 1: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 1: Статус диаграммы: «Джинни» Ингредиентдисплейтекст:3 …

Ответ №1:

Наиболее идиоматичный способ — установить значение состояния при lt;ligt; нажатии на элемент, а затем отобразить это значение состояния.

Используя функциональный компонент, вы можете использовать useState крючок прямым способом.

Пожалуйста, обратите внимание: я позволил себе некоторую вольность с вашим примером кода и добавил тег кнопки и вспомогательную функцию для установки значения.

 const MyComponent = () =gt; {  const [infoText, setInfoText] = React.useState('');   const onButtonClick = (text) =gt; {  setInfoText(text);  }   return (  {ProductDetail amp;amp; ProductDetail.chart?.functionalsInfo?.length ?   ProductDetail.chart?.functionalsInfo.map(Info =gt; (  lt;li key={Info.id}gt;lt;button onClick={e=gt;onButtonClick(Info.seedShapeDisplayText)}gt;{Info.seedShapeDisplayText}lt;/buttongt;lt;/ligt;  )) : lt;ligt;There is notlt;/ligt;}   // seedShapeDisplayText; // one two three four five ...    lt;divgt;  Hi Number {infoText} // one : Minsu, two : Jenny, three : Youngmin, four : Jiho ...  lt;/divgt;    ) }  

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

1. Я думаю, что мне нужно динамически изменять lt;divgt;lt;divgt;lt;/divgt; вместо lt;/divgt; {} text .

2. {Инфотекст lt;divgt;Привет Номер {Инфотекст} lt;divgt;lt;/divgt; } Могу ли я поступить таким образом?

3. Я изменил код, чтобы он был более описательным.

4. / Данные / JSON формируются в этом формате. диаграмма: functionalInfo: Массив(5) 0: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 0: Статус диаграммы: «минсу» Ингредиентдисплейтекст:1 1: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 1: Статус диаграммы: «Джинни» Ингредиентдисплейтекст:3 …

Ответ №2:

Если бы вы могли немного подробнее объяснить свой вопрос, я думаю, что его будет легко понять и ответить.

Вот решение, как я получил ваш вопрос,

здесь я использую состояние, когда numberStatus и когда вы нажимаете на любое из li них, я устанавливаю numberStatus состояние с данными numberStatus выбранного li.

также в нижней части рендеринга я проверяю, имеет ли состояние numberStatus значение, и только если я заставлю его отображаться.

 function MyComponent() {  const [numberStatus, setNumberStatus] = React.useState("");   const dataList = [  { title: "Title 01", numberStatus: "one" },  { title: "Title 02", numberStatus: "two" },  { title: "Title 03", numberStatus: "three" },  ];   return (  lt;divgt;  lt;ulgt;  {dataList.map((val, key) =gt; {  return (  lt;li key={key} onClick={() =gt; setNumberStatus(val.numberStatus)}gt;  {" "}  {val.title}{" "}  lt;/ligt;  );  })}  lt;/ulgt;   {numberStatus amp;amp; lt;divgt;Hi Number {numberStatus}lt;/divgt;}  lt;/divgt;  ); }  

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

1. Я изменил код, чтобы он был более описательным.

2. / Данные / JSON формируются в этом формате. диаграмма: functionalInfo: Массив(5) 0: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 0: Статус диаграммы: «минсу» Ингредиентдисплейтекст:1 1: materialsInfo: Массив(1) 0: igradientsInfo: Массив(1) 1: Статус диаграммы: «Джинни» Ингредиентдисплейтекст:3 …