我有自定义模块(简单的示例):
const myModule = function() {
'hash': localStorage.getItem('hash')
}
export default myModule;
我还需要其他两个模块中的这个模块:
one.js:
import myModule from './myModule';
somethingAction(myModule);
two.js:
import myModule from './myModule';
otherAction(myModule);
问题在于,当用户进入页面时,他必须首先输入值“ hash”,因此,如果他打开应用程序,则我的模块将初始化为hash === null。
如果他输入了值哈希,那么他可以使用其他模块,但是这些模块将绑定为哈希=== null。
如果刷新页面,则一切正常,因此用户输入哈希后重新初始化模块出现问题。
最好的方法是什么?
答案 0 :(得分:1)
欢迎使用StackOverflow。
如果您尝试从模块中检索对象,则解决方案很简单。
您需要在模块内部调用该函数,而不是传递它。
在这里。
myModule.js
const getHash = () => {
return { hash: localStorage.getItem("hash") };
};
export default getHash;
one.js
import getHash from '../myModule.js';
somethingAction(getHash());
two.js
import getHash from '../myModule.js';
otherAction(getHash());
调用函数时,它将从LocalStorage
返回当前哈希值,因此无需刷新页面。
希望它会对您有所帮助。
已编辑
如果哈希令牌来自API,则可以获取并更新一次。在调用getHash之前。
如下所示。
fetch('http://www.exmaple.com/hascode')
.then(res => res.json())
.then(res => localStorage.setItem('hash', res.token)) //consider the response like this {token: 'some_token'}
然后您可以从getHash
呼叫myModule
。即使您已经导入了它。