Печать списков неизвестной длины

У меня есть list(string) неизвестной длины, которую я хотел бы отобразить в своем компоненте ReasonReact. Я читал, что встроенной поддержки нет для печати сложных структур данных. Но как можно отобразить список в его компоненте чисто функциональным способом без использования Javascript? Я нашел фрагмент, который достигает этого, используя рекурсию при сопоставлении с образцом. Я предполагаю, что должен быть более простой способ, поскольку это кажется довольно часто используемой операцией.

Эквивалент Javascript того, чего я пытаюсь достичь, - это Array.toString().


person Dani    schedule 10.10.2018    source источник


Ответы (1)


Если я вас правильно понял, вам нужно выполнить два шага:

  1. Чтобы создать string из list(string), желательно отформатировать так же, как Array.toString, то есть с разделителями-запятыми, без квадратных скобок и без использования каких-либо API-интерфейсов, специфичных для JavaScript.
  2. Чтобы отобразить строку как компонент ReasonReact.

Шаг 1. Преобразование строк

Это можно сделать с помощью String.concat:

let myList = ["a", "b", "c"];
let myString = String.concat(", ", myList);

который вернет "a, b, c"

Шаг 2: Рендерим как компонент ReasonReact

Рендеринг строк в ReasonReact выполняется с использованием ReasonReact.string. Вот полный работоспособный пример компонента, который принимает свойство items типа list(string) и отображает его в элементе <span>.

module ListRenderer = {
  let component = ReasonReact.statelessComponent("ListRenderer");
  let make = (~items, _children) => {
    ...component,
    render: _self =>
      <span> {ReasonReact.string(String.concat(", ", items))} </span>
  };
};

ReactDOMRe.renderToElementWithId(<ListRenderer items=["a", "b", "c"] />, "preview");

Playground link

person glennsl    schedule 10.10.2018
comment
Я совершенно неправильно понял это, это было именно то, что я искал. Еще раз большое спасибо!! - person Dani; 10.10.2018