从 localStorage 获取项目并导出它们

Get items from localStorage and export them

我有一个函数,它接受存储在状态中的字段,如果它们存在,returns 它们。

export const hasNameAndTokenSelector = (state) => {  
    const { fields } = baseInputsSelector(state);
    const hasName = !isNil(prop('name')(fields));
    const hasToken = !isNil(prop('token')(fields));
    
    return hasName && hasToken;
};

但现在我需要使用相同的函数来获取存储在 localStorage 中的项目。 我正在尝试执行以下操作:

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;
    }
  };

localInputs 的格式为:

{
   "name":"John Doe",
   "token":"string123-9882",
}

但它不起作用,我相信这是因为我需要状态参数并且 return 在 if 中,但我不知道正确的方法。

我应该如何获取这些存储项和return它们?我需要在另一个文件中使用hasNameAndTokenSelector。

谢谢!!

如果你localInputs格式是一个对象

{
   "name":"John Doe",
   "token":"string123-9882",
}

你应该从这个对象中取出一个 属性,而不是从 localInputs[0]:

const hasToken = localInputs.token;
const hasName = localInputs.name;

从上面的评论...

"... code review ... since the function's name is hasNameAndTokenSelector it is expected to always return a boolean value, neither once [the undefined default], nor either of the string values localInputs.token / localInputs.name."

因此,为了解决OP原来的问题...

"How should I get these stored items and return them?"

...OP 提供的方法最好重构为两个函数,一个函数完成 getNameAndToken 部分,另一个函数涵盖已经存在的 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();