In a React-Redux application, I've got a state like this:
state = {
items: [
{ id: 1, first_name: "John", last_name: "Smith", country: "us" },
{ id: 2, first_name: "Jinping", last_name: "Xi", country: "cn" },
]
}
which I render using a React component.
Now I need a function that gives me the "full name" of a person. So it's not just "first_name + last_name" but it depends on the country (for example, it would be "last_name + first_name" in China), so there's some relatively complex logic, which I would like to wrap in a function usable from any React component.
In OOP I would create a Person::getFullName()
method that would give me this information. However the state
object is a "dumb" one where sub-objects don't have any specialized methods.
So what is the recommended way to manage this in React-Redux in general? All I can think of is create a global function such as user_getFullName(user)
which would take a user and return the full name, but that's not very elegant. Any suggestion?
I follow the approach of creating libraries for cases like this in my applications, and so far this works pretty well for me.
In this case, I would create a new module, e.g. {ComponentRoot}/lib/user.js
which exports a function getFullName(user)
or possibly getFullName(firstName, lastName, country)
, depending the circumstances.
Now it is just a matter of importing the module where you require the functionality, no global functions needed:
import React from 'react'
import {getFullName} from '../lib/user'
const Title = ({user}) =>
<div>
{getFullName(user)}
</div>
We place our library folder on the same level as the components folder etc., but whatever works best for you should do.