Я наткнулся на фрагмент кода, который решил важную для меня проблему. Существует множество способов повторного использования этого кода, но в этом примере наша цель — отображать смайлик на каждые 10 «лайков» поста.

Давайте представим, что пост набрал 50 лайков. Это означает, что нам нужно отобразить 5 смайликов рядом с ним. Мы также хотим сделать этот код динамическим, чтобы количество эмодзи менялось в зависимости от количества лайков, которые получает каждый пост.

Сначала я знал, как динамически отображать количество отметок "Нравится", которые получил пост

И я, очевидно, знал, как отобразить смайлик рядом с количеством полученных им лайков

Чего я не знал в то время, так это как получить количество смайликов во втором ‹span›, чтобы динамически изменяться в зависимости от количества лайков, полученных постом?»

Я испробовал несколько разных способов сделать конечный результат примерно таким

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

Но в поисках этого ответа я нашел способ сделать конечный результат примерно таким

Чтобы получить количество смайликов, отображаемых в одной строке, и убедиться, что оно является динамическим, чтобы оно могло меняться в зависимости от количества лайков, получаемых любой публикацией, нам нужно каким-то образом получить количество лайков, чтобы «поговорить с» количество смайликов для отображения. Затем нам нужно найти способ отобразить такое же количество смайликов.

Вот немного псевдокода шагов, которые нам нужно предпринять…

  1. Доступ к количеству «лайков» поста

2. Создайте условия для количества лайков, чтобы показать, сколько эмодзи должно отображаться (10 лайков = 1 эмодзи).

3. Получите это количество эмодзи для динамического рендеринга в элемент JSX. (Это сложная часть)

Во-первых, мы должны иметь доступ к количеству отметок "Нравится", которое имеет публикация, с помощью реквизитов, отправляемых из родительских компонентов. Чтобы узнать больше об этом, ознакомьтесь с другой моей статьей.

Во-вторых, нам нужно создать условие, основанное на количестве отметок «Нравится» у поста, чтобы точно знать, сколько эмодзи нужно отображать.

const numOfEmojis =  Math.floor( {props.likes} / 10)

Давайте разберем, что здесь происходит…

Мы берем количество «лайков», которое есть у поста, делим его на десять, а затем «уменьшаем» его так, чтобы это число округлялось в меньшую сторону до ближайшего целого числа.

В этом примере пост с 39 «лайками» должен иметь только 3 смайлика, поскольку он еще не достиг 40, но как только он получит следующий «лайк», должен отображаться 4-й смайлик.

Итак, в приведенном выше примере кода, если значение { props.likes } в настоящее время равно 39, мы должны разделить его на 10 (что составляет 3,9), а затем округлить до ближайшего целого числа (что это 3). Таким образом, в этом примере уравнения numOfEmojis === 3. Это также настроено на изменение всякий раз, когда изменяется значение { props.likes }.

Теперь, когда у нас есть динамический доступ к количеству эмодзи, которые мы хотим отобразить, нам нужно найти способ создать этот ‹span› с переданным в него этим количеством эмодзи.

Это забавная часть…

const emojiStr = [...Array(numOfEmojis)].map( ()=> "😊" ).join(‘’);

Используя конструктор Array() и передав одно число, мы можем создать массив с длиной числа, которое мы передали в аргумент (numOfEmojis). Это дает нам массив желаемой длины, в котором все элементы являются пустыми слотами.

При использовании оператора распространения в этом массиве всем этим пустым элементам массива присваивается значение undefined, и, таким образом, их можно переназначить нашему смайлику с помощью метода .map().

В довершение всего, мы используем метод .join() метод без пробелов ( ' ' ), передаваемых в качестве разделителя, который объединяет все смайлики в один одиночная строка.

Все это было присвоено переменной emojiStr, которая теперь позволяет динамически передавать ее в диапазон нашего элемента JSX.

Давайте применим это на практике шаг за шагом

Во-первых, использование конструктора Array само по себе дает массив пустых слотов, что не служит нашим целям должным образом.

Нам нужно взять тот массив, который был создан с помощью конструктора, и применить к нему оператор расширения, чтобы получить массив нужной длины, который также присваивает каждому элементу значение undefined. Имея это начальное значение undefined, давайте изменим его значение на наш смайлик 😊

Оттуда мы можем использовать метод .map(), чтобы изменить значение каждого элемента на «😊».

Затем мы можем использовать метод .join(), чтобы объединить их все в одну строку, которая присваивается переменной emojiStr, делая ее доступной в другом месте нашего кода.

Надеюсь, это поможет!

-Андрей