reactjs universal-cookie 包调用 get() 时出错
我有以下两个组件。它们位于单独的 .js 文件中。
import Cookie from 'universal-cookie'
class Comp1{
someFunction(){
// Call google Oauth
// get userinfo from Oauth response and set the token below
var cookie = New Cookie();
cookies.set('user', user, { path: '/' })
this.props.history.push('/Comp2')
window.location.reload()
}
}
---------------------------------------------------------
import cookie from 'universal-cookie'
class Comp2{
anotherFunction(){
var user = cookie.get('user');
}
}
第二个组件抛出以下错误:
TypeError: universal_cookie__WEBPACK_IMPORTED_MODULE_4__.default.get is not a function
我该如何解决?
更新:google oauth 流程
首先,
var cookie = New Cookie();
会导致语法错误。
使用
var cookie = new Cookie();
作为 JavaScript 关键字,作为键敏感的关键字。
其次,您的导入再次与大小写不一致:
import Cookie from 'universal-cookie'
import cookie from 'universal-cookie'
这些会引起混淆。您将需要重构它以在组件之间进行标准化。例如,只需选择大写字母“C”:
import Cookie from 'universal-cookie'
最后,考虑到我提到的大小写敏感性&正如其他人提到的,您需要将 Cookie 实例化为 它是一个类 。您的组件应如下所示:
import Cookie from 'universal-cookie';
class Comp extends React.Component {
...
someFunction() {
var cookie = new Cookie();
cookie.set('user', "somecookie", { path: '/' })
}
...
}
import Cookie from 'universal-cookie'
class Comp extends React.Component {
...
someFunction() {
var cookie = new Cookie();
console.log(cookie.get('user'));
}
...
}
CodeSandBox: https://codesandbox.io/s/universal-cookie-react-components-8lc3m
另外,仅供参考,请勿使用隐身模式测试我的沙盒
我认为问题在于您没有在第二个代码块中调用
new Cookie();
,因此 get 和 set 等方法未初始化。
您可以尝试这种方法,每次想要访问 cookie 时都调用 new。
import Cookie from 'universal-cookie'
class Comp2 {
anotherFunction(){
var cookie = New Cookie();
var user = cookie.get('user');
}
}
或者您可以创建一个可以从任何地方访问的“全局”变量。
由于您正在单独的文件中访问
globalCookie
,因此您必须将初始化代码放在一个文件中,该文件在包含使用
globalCookie
变量的代码的文件之前被调用/导入。
但是使用全局变量时请务必小心,因为它们很容易在代码中引入难以发现的 bug。
import Cookie from 'universal-cookie';
var globalCookie = New Cookie();
class Comp1{
someFunction(){
globalCookie.set('user', user, { path: '/' })
}
}
class Comp2{
anotherFunction(){
var user = globalCookie.get('user');
}
}
请参阅 github repo 中的文档: https://github.com/reactivestack/cookies/tree/master/packages/universal-cookie
您的 Comp2 中有
import cookie from 'universal-cookie'
。
将其替换为
import Cookie from 'universal-cookie'