Где разместить служебные функции в приложении React-Redux?

В приложении React-Redux у меня есть такое состояние:

state = {
    items: [
        { id: 1, first_name: "John", last_name: "Smith", country: "us" },
        { id: 2, first_name: "Jinping", last_name: "Xi", country: "cn" },
    ]
}

который я рендеринг с использованием компонента React.

Теперь мне нужна функция, которая дает мне "полное имя" человека. Так что это не просто "first_name + last_name", но это зависит от страны (например, это будет "last_name + first_name" в Китае), поэтому есть некоторая относительно сложная логика, которую я хотел бы заключить в функцию, которую можно использовать из любого Реагировать компонент.

В ООП я бы создал Person::getFullName() метод, который дал бы мне эту информацию. Тем не менее state Объект является "тупым", где у подобъектов нет специальных методов.

Итак, каков рекомендуемый способ управления этим в React-Redux в целом? Все, что я могу думать, это создать глобальную функцию, такую ​​как user_getFullName(user) что бы взять пользователя и вернуть полное имя, но это не очень элегантно. Любое предложение?

2 ответа

Решение

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

В этом случае я бы создал новый модуль, например {ComponentRoot}/lib/user.js который экспортирует функцию getFullName(user) или возможно getFullName(firstName, lastName, country)в зависимости от обстоятельств.

Теперь это просто вопрос импорта модуля, в котором вам требуются функциональные возможности, а глобальные функции не требуются:

import React from 'react'
import {getFullName} from '../lib/user'

const Title = ({user}) =>
    <div>
        {getFullName(user)}
    </div>

Мы помещаем нашу библиотечную папку на тот же уровень, что и папка компонентов и т. Д., Но все, что работает лучше для вас, следует делать.

Прежде всего, у Redux нет мнения о файловой структуре вашего приложения.

Некоторые известные шаблонные проекты помещают код в utils/ папка:

Пример структуры папок:

  • SRC /
    • компоненты/
      • ...
    • редукторы /
      • ...
    • Utils /
      • ...
Другие вопросы по тегам