我在文件中定义了一个对象,如下所示:
export const items = {
first: false,
second: false,
third: false
}
Run Code Online (Sandbox Code Playgroud)
我在组件中使用它,如下所示:
import { items } from 'file';
const [elements, setElements] = useState(items);
Run Code Online (Sandbox Code Playgroud)
我有一个方法,当单击按钮时会调用该方法 - 该方法应该将所有值更改elements为true
使用以下更改值,但它不会触发组件的重新渲染(这就是我需要的)
Object.keys(elements).forEach(element => elements[element] = true);
Run Code Online (Sandbox Code Playgroud)
我如何使用setElements来更新 中的所有值elements?
我有一个 React 组件,它从 Flask 后端提供的 url 获取数据,并使用该数据显示折线图。我想刷新前端的图表,而无需用户手动刷新页面。
代码是:
function Graph() {
const [graphData, setGraphData] = useState([]);
useEffect(() => {
fetchGraphData();
}, []);
const fetchGraphData = async () => {
const result = await fetch("url")
const fetchedGraphData = await result.json();
if(res.ok) {
setGraphData(fetchedGraphData);
}
};
return (
<div>
<Container>
<LineChart>
....
</LineChart>
</Container>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
我尝试在任何地方以及我能想到的任何方式使用setIntervaland setTimeout,但我根本无法让它工作。
我认为这setTimeout应该更好,因为它可以保证在再次执行之前等待服务器响应,而不是setInterval在出现延迟时对查询进行排队。
我有主要的 App.js 组件,我在其中制作了类似数据库的东西。我希望授权用户的对象位于 App.js 中,我创建了一个 useState 来存储该用户。
import React, {useState} from 'react';
import './App.css';
import AuthPage from './components/AuthPage/AuthPage';
function App() {
const [activeUser, setActiveUser] = useState();
const [users, setUsers] = useState(
[
{
name: 'Andrey',
email: 'qwerty@mail.ru',
password: 'qwerty'
},
{
name: 'Roma',
email: 'ramenCisco@mail.ru',
password: '123'
},
{
name: 'Ilya',
email: 'ilyazxc@mail.ru',
password: 'zxc'
}
]
)
return (
<>
<AuthPage users = {users} setActiveUser = {setActiveUser}/>
</>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
为了将用户放在那里,我需要他首先登录,为此我有 AuthPage.js 组件,Login.js 位于其中,反过来,我将通过该组件传递具有授权的对象用户直接访问状态应用程序。为此,我使用 props 将 …
使用名称值查找 API 后,MyReactComponent返回一个超链接和一条消息。不过,我想仅当 name 不为空时才渲染此组件(包括进行 API 调用)。下面的内容能解决这个目的吗?还是我应该以不同的方式处理这个问题?
<dt hidden={null == name || '' === name.trim()}>
<MyReactComponent name={name || ' '} />
</dt>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用自定义挂钩来调用将用于多个组件和上下文的函数。但是,钩子永远不会更新上下文值,它始终是一个空数组,但在上下文中,用作上下文值的状态会被更新,并且在组件中会接收上下文值。这里发生了什么?
在我看来,上下文值没有被传递给钩子,但我不明白为什么。
这是我的代码示例:
语境:
import { createContext, useState, useEffect } from "react";
import useTest from "./useTest";
const TestContext = createContext({
test: [],
testContextFn: () => {}
});
export const TestProvider = ({ children }) => {
const [testState, setTestState] = useState([]);
const { testFn } = useTest();
const testHandlerHandler = () => {
const test = 1;
setTestState((current) => [...current, test]);
testFn();
};
const contextValue = {
test: testState,
testContextFn: testHandlerHandler
};
useEffect(() => {
console.log("state: ", testState); // => …Run Code Online (Sandbox Code Playgroud) 我试图GET使请求获取单个用户的查询无效。由于有很多用户,我必须根据我的GET请求提供 2 个查询键,fetch-user并且id:
useQuery<User, AxiosError>(['fetch-user', id], () => fetchUser(id));
Run Code Online (Sandbox Code Playgroud)
每当我作为PATCH用户时,我想要使所述请求无效,否则将显示以前的(缓存的)值而不是更新的值。
fetch-user如何使具有特定键(在我的情况下)和 的附加键的查询无效id?
挂钩GET具有特定 id 的用户:
const fetchUser = (id: number): Promise<User> => {
return axios.get(`/users/${id}`).then((resp) => resp.data);
};
export const useUserData = (id: number) => {
return useQuery<User, AxiosError>(['fetch-user', id], () => fetchUser(id));
};
Run Code Online (Sandbox Code Playgroud)
挂钩PATCH具有特定 id 的用户:
const patchUser = (id: number, body: PatchUser): Promise<User> => {
return axios
.patch(`/users/${id}`, body, …Run Code Online (Sandbox Code Playgroud) 我正在执行一项任务,需要一项一项更新待办事项列表。我正在选择一个待办事项列表,当我单击更新按钮时,它应该使用 forEach 循环逐个更新待办事项。如果选择待办事项,下面是列表
selectedTodos = [
{
todoID:630316783e09e69bda667e2e,
userID:630316783e09e69bda63dvft3,
completed:false
},
{
todoID:630316783e09e69bda667ssdw36,
userID:988765yk6783e09e69bda667e2e,
completed:false
},
{
todoID:630316783765gbjybda667e2e,
userID:630316783e09e69vfft567742,
completed:false
},
]
Run Code Online (Sandbox Code Playgroud)
我正在使用forEach循环来迭代列表并逐一更新,如下所示
selectedTodos.forEach(async(todo)=>{
const {data} = await axios.put(API_URL+"/todo/"+ todo.todoID,{
completed:true
})
console.log(data)
})
Run Code Online (Sandbox Code Playgroud)
这里的 async-await 不在循环内工作,但是当我单独更新它时,它正在工作。它不仅仅在forEach循环上工作。我没有一个端点可以一次更新所有内容。我需要循环遍历列表并一一更新。还有其他办法吗?
尝试将打字稿添加到自定义反应表单组件中,但无法消除我不知道如何修复的错误。TS7053:元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“{ username: string;” 电子邮件:字符串;密码:字符串;确认密码:字符串;}'。在类型“{ username: string;”上找不到带有“string”类型参数的索引签名 电子邮件:字符串;密码:字符串;确认密码:字符串;}'。
我确信某个地方有答案,但我无法将其调整为我的代码,也无法理解错误的基本原理。请帮助我理解
应用程序组件
import React, {useState} from 'react';
import s from './App.module.scss'
import Input from "./components/Input/Input";
function App() {
const [values, setValues] = useState({
username: '',
email: '',
password: '',
confirmPassword: '',
});
const inputs = [
{
id: "username",
name: "UserName",
type: "text",
placeholder: "Username",
},
{
id: "email",
name: "Email",
type: "text",
placeholder: "@gmail.com",
},
]
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValues({...values, [e.target.name]: e.target.value});
}
return (
<div className={s.app}>
<form …Run Code Online (Sandbox Code Playgroud) 我有两个组件,一个父组件和一个子组件。父组件将子组件的列表保存在状态中,并使用 map 方法渲染它。
家长:
import { useState } from "react";
import Child from "./Child";
export default function Parent(){
const [counter, setCounter] = useState(0)
const [childKey, setChildKey] = useState(0);
const [children, setChildren] = useState([]);
function addChild(){
setChildren([...children, <Child counter={counter} index={childKey}/>]);
setChildKey(childKey + 1);
}
return (
<>
<h2>The parent component</h2>
<p>The counter is set to {counter}</p>
<p><button onClick={() => {setCounter(counter + 1)}}>Increment</button></p>
<p><button onClick={addChild}>Add child</button></p>
{children.map((c, i) => {
return (
<div key={i}>{c}</div>
);
})}
</>
);
}
Run Code Online (Sandbox Code Playgroud)
孩子:
export …Run Code Online (Sandbox Code Playgroud) 我现在正在尝试学习 React hooks,但 useState API 对我来说没有任何意义。
为什么我们要使用数组来表示一个值并使用该值的设置器?对于这个特定的设计选择有任何合乎逻辑的解释吗?
react-hooks ×10
reactjs ×10
javascript ×7
arrays ×2
typescript ×2
async-await ×1
react-query ×1
use-state ×1