新的反应挂钩和不确定如何解决。我在下面的App.js文件中有以下代码片段。
我基本上试图实现的是通过调用getUser()
函数让用户登录,一旦我有了用户标识,然后通过调用用户的函数check UserAccess()
来检查他们是否是授权用户ID.
根据validis
数组中的结果,我检查它是否为真,并通过setauthorized()
调用将authorized state设置为真或假。
我的问题是,我需要先处理这个过程,然后在我的App.js文件中执行我的第一次渲染。
现在,它说我没有被授权,即使我是。
任何人都可以帮助我做错事,因为我需要确保在应用程序的第一个组件呈现之前正确设置authorized
useState,即path=“/”
const [theId, setTheId] = useState('');
const [authorised, setAuthorised] = useState(false);
const checkUserAccess = async (empid) => {
try {
const response = await fetch("http://localhost:4200/get-valid-users");
const allUsers = await response.json();
const validIds = allUsers.map(({ id }) => id);
const isAuthorised = validIds.includes(empid);
if (isAuthorised) {
setAuthorised(true)
} else {
setAuthorised(false)
}
} catch (err) {
console.error(err.message);
}
}
const getUser = async () => {
try {
const response = await fetch("http://localhost:4200/get-user");
const theId= await response.json();
setTheId(theId);
checkUserAccess(theId);
} catch (err) {
console.error(err.message);
}
}
useEffect(() => {
getUser();
}, []);
这样它应该可以工作,但请记住,只有当状态中的id存在时,您才必须呈现您的应用,这意味着您的用户被正确地获取。
const [state, setState] = useState({ theId: '', isAutorized: false })
const getUser = async () => {
try {
const idResp = await fetch("http://localhost:4200/get-user");
const theId = await idResp.json();
const authResp = await fetch("http://localhost:4200/get-valid-users");
const allUsers = await authResp.response.json();
const validIds = allUsers.map(({ id }) => id);
const isAuthorised = validIds.includes(theId);
setState({ theId, isAuthorised })
} catch (err) {
console.error(err.message);
}
}
useEffect(() => {
getUser();
}, []);
if (!state.theId) return <div>Loading</div>;
if (state.theId && !isAuthorized) return <AccessNotAllowed />
return <Home />
除非您希望在获取用户ID后进行部分渲染,然后获取访问级别。没有理由拥有多个useState/useEffect。
只需获取您的用户,然后获取您的访问级别并使用它。
下面是一个例子。
const [user, setUser] = useState(null);
const checkUserAccess = async (empid) => {
const response = await fetch("http://localhost:4200/get-valid-users");
const allUsers = await response.json();
const validIds = allUsers.map(({ id }) => id);
const isAuthorised = validIds.includes(empid);
return isAuthorised;
}
const getUser = async () => {
try {
const response = await fetch("http://localhost:4200/get-user");
const theId= await response.json();
const access = await checkUserAccess(theId);
setUser({
theId,
access
});
} catch (err) {
console.error(err.message);
}
}
useEffect(() => {
getUser();
}, []);
if (!user) return <div>Loading</div>;
return <>{user.theId}</>
我已经按照https://reactnative.dev/docs/environment-setup中规定的说明,除了choclatey,因为我已经有了节点等,但我不能构建我的应用程序,以达到仿真器上的输出RN样板(步骤2:在文档中)以下npx反应本机运行android。我已经搜索了很多很多个小时来寻找一个解决方案,但是我一无所获,这变得非常令人沮丧。下面我附上了相关的输出。 提前感谢您的帮助。
我需要以下方面的帮助:我正在javafx中实现一个应用程序,这个应用程序是通过单击按钮调用的。问题是当我关闭应用程序时,我不能再次调用它。我读到过你不能多次调用Application.launch()方法。但是我在服务类上发现了一些东西。留档页面中的示例不是很清楚。有人知道如何做到这一点吗?谢谢。 http://docs.oracle.com/javafx/2/threads/jfxpub-thr
问题内容: 在我的应用程序中,首先显示启动屏幕。在进行另一项活动之后,必须显示我的主要活动。这是我的设计计划。必须为应用程序的首次用户显示第二个活动(即在主要活动之前)。如果他/她关闭应用程序,启动屏幕将自动重定向到主要活动。我该怎么做呢?有任何想法吗?我正在为Android手机开发应用程序。 问题答案: 在首选项中保留一个标志,并在启动时进行检查。闪屏显示一次后更改其状态。
问题内容: 我的问题很简单,我该如何识别首次申请?我认为可以通过在RMS中保存一些值并在应用启动时读取它并决定要做什么来实现。 但是没有更简单的解决方案吗? 问题答案: 据我所知,没有比这更简单的方法了,但这还是很容易的。
我第一次尝试React钩子,一切似乎都很好,直到我意识到当我获取数据并更新两个不同的状态变量(数据和加载标志)时,我的组件(数据表)会呈现两次,尽管对状态更新器的两次调用都发生在同一个函数中。下面是我的api函数,它将两个变量都返回到我的组件中。 在普通的类组件中,您只需调用一次来更新状态,状态可能是一个复杂的对象,但“挂钩方式”似乎是将状态拆分为更小的单元,其副作用似乎是在单独更新时多次重新呈现
错误: