return 来自 localForage getItem 的布尔值
return a boolean value from localForage getItem
import localForage from 'localforage';
import React from 'react';
import globalHook, { Store } from 'use-global-hook';
interface State {
isLoading: boolean;
isAuthenticated: boolean;
}
type Action = {
setIsLoading: (isLoading: boolean) => void;
setIsAuthenticated: (isAuthenticated: boolean) => void;
};
const authenticate = localForage
.getItem('token')
.then((value) => {
return value ? true : false;
})
.catch(function (err) {});
const initialState: State = {
isLoading: false,
isAuthenticated: false,
};
const actions = {
setIsLoading: (store: Store<State, Action>, isLoading: boolean) => {
store.setState({ ...store.state, isLoading });
},
setIsAuthenticated: (
store: Store<State, Action>,
isAuthenticated: boolean
) => {
store.setState({ ...store.state, isAuthenticated });
},
};
const useGlobal = globalHook<State, Action>(React, initialState, actions);
export default useGlobal;
嗨,我正在 reactjs 中实现登录功能,并使用 localforage 来存储令牌。我在全局状态中有一个 isAuthenticated 状态。现在我想根据 localForage 是否有令牌将 isAuthenticated initialValue 值更改为 true 或 false。
因此,如果 localForage 有值或没有值,我想 return 一个布尔值。但现在它 return 是一个承诺,而不是 localForage 的布尔值。
在此先感谢您的帮助
我觉得你的authenticate函数有点不对。我会做什么,我会验证一个函数,然后该函数会调用 localForage 来获取随后返回的令牌。
我已经制作了一个使用 localForage 的快速示例。我先在渲染组件时设置令牌,然后从 localForage 获取它。然后它会正确呈现该值,无需执行任何其他操作。请以此为例。你也可以找到它here
import React, { useState, useEffect } from "react";
import localForage from "localforage";
export default function App() {
const [token, setToken] = useState("");
const [error, setError] = useState(null);
const authenticate = () => {
return localForage
.getItem("token")
.then((value) => setToken(value))
.catch((err) => setError(err));
};
useEffect(() => {
localForage.setItem("token", "token123");
authenticate();
}, []);
return (
<div className="App">
{error ? <p>Error {error}</p> : <p>Token: {token}</p>}
</div>
);
}
import localForage from 'localforage';
import React from 'react';
import globalHook, { Store } from 'use-global-hook';
interface State {
isLoading: boolean;
isAuthenticated: boolean;
}
type Action = {
setIsLoading: (isLoading: boolean) => void;
setIsAuthenticated: (isAuthenticated: boolean) => void;
};
const authenticate = localForage
.getItem('token')
.then((value) => {
return value ? true : false;
})
.catch(function (err) {});
const initialState: State = {
isLoading: false,
isAuthenticated: false,
};
const actions = {
setIsLoading: (store: Store<State, Action>, isLoading: boolean) => {
store.setState({ ...store.state, isLoading });
},
setIsAuthenticated: (
store: Store<State, Action>,
isAuthenticated: boolean
) => {
store.setState({ ...store.state, isAuthenticated });
},
};
const useGlobal = globalHook<State, Action>(React, initialState, actions);
export default useGlobal;
嗨,我正在 reactjs 中实现登录功能,并使用 localforage 来存储令牌。我在全局状态中有一个 isAuthenticated 状态。现在我想根据 localForage 是否有令牌将 isAuthenticated initialValue 值更改为 true 或 false。 因此,如果 localForage 有值或没有值,我想 return 一个布尔值。但现在它 return 是一个承诺,而不是 localForage 的布尔值。 在此先感谢您的帮助
我觉得你的authenticate函数有点不对。我会做什么,我会验证一个函数,然后该函数会调用 localForage 来获取随后返回的令牌。
我已经制作了一个使用 localForage 的快速示例。我先在渲染组件时设置令牌,然后从 localForage 获取它。然后它会正确呈现该值,无需执行任何其他操作。请以此为例。你也可以找到它here
import React, { useState, useEffect } from "react";
import localForage from "localforage";
export default function App() {
const [token, setToken] = useState("");
const [error, setError] = useState(null);
const authenticate = () => {
return localForage
.getItem("token")
.then((value) => setToken(value))
.catch((err) => setError(err));
};
useEffect(() => {
localForage.setItem("token", "token123");
authenticate();
}, []);
return (
<div className="App">
{error ? <p>Error {error}</p> : <p>Token: {token}</p>}
</div>
);
}