如何重新初始化所需的模块?

时间:2019-05-19 13:41:15

标签: javascript reactjs

我有自定义模块(简单的示例):

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。

如果刷新页面,则一切正常,因此用户输入哈希后重新初始化模块出现问题。

最好的方法是什么?

1 个答案:

答案 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。即使您已经导入了它。