Tengo una función donde toma campos almacenados en estado y los devuelve si existen.
export const hasNameAndTokenSelector = (state) => { const { fields } = baseInputsSelector(state); const hasName = !isNil(prop('name')(fields)); const hasToken = !isNil(prop('token')(fields)); return hasName && hasToken; };Pero ahora necesito usar esta misma función para obtener elementos almacenados en localStorage. Estoy tratando de hacer lo siguiente:
export const hasNameAndTokenSelector = (state) => { if (localStorage.getItem('inputs') !== null) { const localInputs = JSON.parse(localStorage.getItem('inputs')); const hasToken = localInputs[0].token; const hasName = localInputs[0].name; return hasName && hasToken; } };El formato de entradas locales es:
{ "name":"John Doe", "token":"string123-9882", }Pero no funciona, creo que es porque necesito el parámetro de estado y el retorno está dentro de un si, pero no sé la forma correcta de proceder.
¿Cómo debo obtener estos artículos almacenados y devolverlos? Necesito usar hasNameAndTokenSelector en otro archivo.
¡¡Gracias!!
Del comentario anterior...
" ... revisión de código ... dado que el nombre de la función es
hasNameAndTokenSelector, se espera que siempre devuelva un valor booleano, ni una vez [el valor predeterminadoundefined], ni ninguno de los valores de cadenalocalInputs.token/localInputs.name".
Por lo tanto, para resolver el problema original del OP...
"¿Cómo debo obtener estos artículos almacenados y devolverlos?"
... el enfoque proporcionado por el OP podría refactorizarse mejor en dos funciones, una que cumple con la parte getNameAndToken y otra que cubre la parte ya existente hasNameAndToken ...
// `storedInputs` structure ... // { // "name":"John Doe", // "token":"string123-9882", // } export const getNameAndToken = () => { const storedInputs = localStorage.getItem('inputs'); return (storedInputs !== null) && JSON.parse(storedInputs) || {}; }; export const hasNameAndToken = () => { const { name, token } = getNameAndToken(); return !!(name && token); }; // usage in other modules import { getNameAndToken/*, hasNameAndToken*/ } from '/' const { name, token } = getNameAndToken();Si su formato localInputs es un objeto
{ "name":"John Doe", "token":"string123-9882", } Simplemente debe tomar una propiedad de este objeto, no de localInputs[0] :
const hasToken = localInputs.token; const hasName = localInputs.name;