【问题标题】:Functional JavaScript set local-storage [duplicate]功能性JavaScript设置本地存储[重复]
【发布时间】:2021-04-02 07:48:12
【问题描述】:

当谈到过程式编程时,我在 Vanilla JS 中非常适应,所以我跳入函数式编程以扩大我的知识并为下一个级别的 Javascript 使用做好准备...

嗯,我花了大约 3 分钟才到达我第一次不想要的遭遇,因为保存到本地商店并没有完全按照我的计划工作。

当点击按钮时,应用程序会简单地将userInput.value 添加到本地存储中。 发生的事情是它添加到空的本地商店。美好的。 然后当用户再次尝试添加时,结果就是这样

.

这里是完整代码,只有一个userInput.value和一个button可以触发

//////////////////////////////////////////////////////
// Functional programmed version:
//////////////////////////////////////////////////////

function getStorageData() {
    return localStorage.getItem('itemsArray') || [];
}
function setStorageData(obj) {
    return localStorage.setItem('itemsArray', JSON.stringify(obj));
}

function getUserInput(input) {
    return document.querySelector(input).value;
}

function addToStorage(userInput) {
    return setStorageData({...getStorageData(), userInput});
}

function submitHandler(event) {
    event.preventDefault();
    addToStorage(getUserInput('input'));
}

function connectForm(button, submit) {
    const addBtn = document.querySelector(button);
    addBtn.addEventListener('click', submit);
}

connectForm('.add-btn', submitHandler)

一个问题我看到应用程序试图将其作为{userInput: value} 之类的对象而不是value 所以它可能会在添加具有不同值的相同对象时中断...我怎样才能在这里摆脱变量?它似乎自动将变量放在那里。

提前感谢所有帮助!

【问题讨论】:

  • 你是...[]一个数组变成一个对象。好像有问题
  • 所有的 setter 都返回 undefined
  • 另外您需要致电JSON.parse()
  • 我最初有 JSON.parse() 但我得到:每次 JSON 输入都意外结束。此外,如果它有一个初始值,我在 pos 1 上得到一个 Unexpected o of JSON input ...
  • 这些函数都不遵循函数式编程范式。它们都有副作用或依赖于全局状态(DOM)。这看起来仍然像命令式编程,只是有很多分隔良好的单元。

标签: javascript functional-programming local-storage


【解决方案1】:

这就是你需要做的事情..

function getStorageData() {
    return JSON.parse(localStorage.getItem('itemsArray') || '[]'); // load the array filled or empty
}

function setStorageData(obj) {
    localStorage.setItem('itemsArray', JSON.stringify(obj)); // nothing to return here
}

function getUserInput(input) {
    return document.querySelector(input).value; // this return purely a value and not a JSON object.
}

function addToStorage(userInput) {
    setStorageData([...getStorageData(), userInput]); // you are changing an array into a JSON object here, and also nothing to return here.
}

其他都很好。

【讨论】:

  • 与此同时,我设法解决并完成了整个列表。 addToStorage 迭代到一个数组而不是一个对象是一个问题,另一个是getStorageData() { return JSON.parse(localStorage.getItem('itemsArray')) || '[]'; } 应该只解析本地存储。
  • 没有。如果未设置localStorage,您将收到 JSON.parse 错误。
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2018-05-26
  • 2017-03-19
相关资源
最近更新 更多