Присоединитесь к массиву строк JS и элементу JSX

Я пытаюсь присоединиться к массиву элементов "8.8.8.8".split('.') JS с элементом JSX <span className = "bullet">•</span>.

Рендеринг этого в среде React дает 8[object Object]8[object Object]8[object Object]8.

Любое решение для этого?

каков ваш ожидаемый результат?

ashish singh 08.09.2018 18:40

8 • 8 • 8 • 8 @ashishsingh

Rakesh Peela 08.09.2018 18:41

точка - это элемент html?

ashish singh 08.09.2018 18:42

@ashishsingh да. Это <span className = "bullet"> • </span>

Rakesh Peela 08.09.2018 18:45

но это не строка, это элемент JSX, и, следовательно, он делает это

ashish singh 08.09.2018 18:46

Должен ли я тогда сопоставить массив с элементом JSX?

Rakesh Peela 08.09.2018 18:47

да, это абсолютно верно

ashish singh 08.09.2018 18:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
309
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я предполагаю, что вы пытаетесь зациклить, а затем визуализировать промежуток с маркером на итерацию.

Я также предполагаю, что вам нужен диапазон, чтобы он был встроенным элементом?

Я бы не использовал маркер-маркер, а скорее использовал бы что-то вроде:

<ul>
    // loop through your array here
    <li className = "bullet" style = "display:inline;"> 
         arrayElement 
    </li>
</ul>

в качестве альтернативы, если вы ДОЛЖНЫ использовать маркер, просто укажите фактический код для маркера, а не символ

• (Круговой список) код: & #8226; или & bull;

Ответ принят как подходящий

Попытайся

"8.8.8.8".split('.').reduce((res, item) => {
    if (!res) {
        return [item];
    }

    return [...res, <span className = "bullet">•</span>, item];
})

На самом деле вам не нужен if (!res) { return [item]; }

streletss 08.09.2018 19:16

Почему? Требуется для инициализации первого элемента

Philip Pavo 08.09.2018 19:22

Я почти уверен, что «8» - это первый элемент. Нет?

streletss 08.09.2018 19:25

Поскольку это для React, это можно сделать так.

В вашем компоненте:

render(){
    let myArray = "8.8.8.8".split('.');

    return (
    <div>
      {myArray.map((item, index) => {
        if (index !== myArray.length -1 ) {
            return <span key = {index}>{item}<span className = "bullet">•</span></span>
           } else {
            return <span key = {index}>{item}</span>
           }
         })}
    </div>
    );
}

В основном то, что здесь делается:

  • Создайте массив (или получите его из другой функции).
  • Переберите элементы массива.
  • Создайте объект span для чисел и точки, кроме последнего.
  • Все делается в рендере компонента.

Результат:

8•8•8•8

В html:

<div>
    <span>8<span class = "bullet">•</span></span>
    <span>8<span class = "bullet">•</span></span>
    <span>8<span class = "bullet">•</span></span>
    <span>8</span>
</div>

Вот Песочница, чтобы увидеть, как он работает.

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

Удалить:

let myArray = "8.8.8.8".split('.');

изменение

myArray.map

к

this.props.myArray.map

позвоните так:

<NumberDotComponent myArray = {"8.8.8.8".split('.')}/>

Проблема в том, что join пытается преобразовать объект (элемент React) в строку, поскольку соединение является строковой функцией. [object Object] является результатом метода toString для этого объекта. Вместо этого вы должны вернуть массив.

Вот пример, который выполняет итерацию по каждому символу строки и заменяет определенный символ элементом React:

function App(props) {
  let foo = '8.8.8.8'
  let replaceChar = '.'
  let output = [...foo].map(char=>(
    char === replaceChar ? <span className = "bullet">•</span> : char
  ))
  
  return <React.Fragment>{output}</React.Fragment>
}

ReactDOM.render(<App />, document.getElementById('app'));
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.4.2/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.2/umd/react-dom.production.min.js" integrity = "sha256-3NNU/yoE0R7VxxapKiw/hkgQzcSMztyclb5RpeVlV7Y = " crossorigin = "anonymous"></script>

<div id = "app">Error Encountered</div>

Другие вопросы по теме