调用get()时reactjs universal-cookie包错误
reactjs universal-cookie package error when calling 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 流程
我认为问题在于您没有在第二个代码块中调用 new Cookie();
,因此没有初始化 get 和 set 等方法。
您可以尝试这种方法,每次要访问 cookie 时都调用 new。
import Cookie from 'universal-cookie'
class Comp2 {
anotherFunction(){
var cookie = New Cookie();
var user = cookie.get('user');
}
}
或者您可以创建一个您可以从任何地方访问的“全局”变量。
因为您在单独的文件中访问 globalCookie
,所以您必须将初始化代码放在 called/imported 的文件中,该文件位于包含使用 globalCookie
变量的代码的文件之前。
但是请非常小心地使用全局变量,因为它们很容易将难以发现的错误引入您的代码。
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 文档库:https://github.com/reactivestack/cookies/tree/master/packages/universal-cookie
您的 Comp2 中有 import cookie from 'universal-cookie'
。
将其替换为 import Cookie from 'universal-cookie'
首先,var cookie = New Cookie();
会导致语法错误。
使用 var cookie = new Cookie();
作为 JavaScript 关键字敏感。
其次,您的 case-sensitivity 再次与您的导入不一致:
import Cookie from 'universal-cookie'
import cookie from 'universal-cookie'
这些会引起混淆。您将想要重构它以跨组件标准化。例子只是选择大写 'C':
import Cookie from 'universal-cookie'
最后,考虑到我提到的 case-sensitivity 以及其他人提到的,您需要将 Cookie 实例化为 it is a class。您的组件应如下所示:
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'));
}
...
}
代码沙盒:https://codesandbox.io/s/universal-cookie-react-components-8lc3m
此外,仅供参考,我不使用 Incognito 来测试我的沙箱
我有以下两个组成部分。它们位于单独的 .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 流程
我认为问题在于您没有在第二个代码块中调用 new Cookie();
,因此没有初始化 get 和 set 等方法。
您可以尝试这种方法,每次要访问 cookie 时都调用 new。
import Cookie from 'universal-cookie'
class Comp2 {
anotherFunction(){
var cookie = New Cookie();
var user = cookie.get('user');
}
}
或者您可以创建一个您可以从任何地方访问的“全局”变量。
因为您在单独的文件中访问 globalCookie
,所以您必须将初始化代码放在 called/imported 的文件中,该文件位于包含使用 globalCookie
变量的代码的文件之前。
但是请非常小心地使用全局变量,因为它们很容易将难以发现的错误引入您的代码。
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 文档库:https://github.com/reactivestack/cookies/tree/master/packages/universal-cookie
您的 Comp2 中有 import cookie from 'universal-cookie'
。
将其替换为 import Cookie from 'universal-cookie'
首先,var cookie = New Cookie();
会导致语法错误。
使用 var cookie = new Cookie();
作为 JavaScript 关键字敏感。
其次,您的 case-sensitivity 再次与您的导入不一致:
import Cookie from 'universal-cookie'
import cookie from 'universal-cookie'
这些会引起混淆。您将想要重构它以跨组件标准化。例子只是选择大写 'C':
import Cookie from 'universal-cookie'
最后,考虑到我提到的 case-sensitivity 以及其他人提到的,您需要将 Cookie 实例化为 it is a class。您的组件应如下所示:
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'));
}
...
}
代码沙盒:https://codesandbox.io/s/universal-cookie-react-components-8lc3m
此外,仅供参考,我不使用 Incognito 来测试我的沙箱