【发布时间】: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