Reactjs 从redux状态获取不同的值
我有如下代码:Reactjs 从redux状态获取不同的值,reactjs,redux,react-redux,react-hooks,react-router-dom,Reactjs,Redux,React Redux,React Hooks,React Router Dom,我有如下代码: import React, { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { Link, useParams } from "react-router-dom"; import { createClient, getClients } from "../re
import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Link, useParams } from "react-router-dom";
import { createClient, getClients } from "../redux/actions/clients";
function UpdateClient(props) {
let params = useParams();
const { error, successSubmit, clients } = useSelector(
(state) => state.clients
);
const [client, setClient] = useState(clients[0]);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getClients({ id: params.id }));
}, []);
const submitClient = () => {
dispatch(createClient(client));
};
return (
<div>{client.name} {clients[0].name}</div>
);
}
export default UpdateClient;
import React,{useffect,useState}来自“React”;
从“react redux”导入{useDispatch,useSelector};
从“react router dom”导入{Link,useParams};
从“./redux/actions/clients”导入{createClient,getClients};
函数更新客户端(props){
设params=useparms();
const{error,successSubmit,clients}=useSelector(
(state)=>state.clients
);
const[client,setClient]=useState(客户端[0]);
const dispatch=usedpatch();
useffect(()=>{
调度(getClients({id:params.id}));
}, []);
const submitClient=()=>{
调度(createClient(client));
};
返回(
{client.name}{clients[0].name}
);
}
导出默认的UpdateClient;
结果是不同的client.name
returntest1
,
而客户端[0]。name
根据路由参数id(在本例中,参数id值为7)返回正确的数据,该参数为test7
我需要本地状态来临时保存表单数据。我不知道。。为什么会变得不同
你们能帮帮我吗?提前感谢您引用的是一个过时状态,它是
客户端
状态的副本
如果要查看更新状态,应使用useffect
useEffect(() => {
setClient(clients[0]);
}, [clients]);
请注意,复制状态为
对于React应用程序中更改的任何数据,都应该有一个“真实来源”
您需要使用客户端作为依赖项,使用useEffect更新本地状态/组件状态。那么,您的意思是我不再需要useEffect()中的dispatch语句了?不,我从来没有说过,我想您希望在组件挂载时获取客户端,根据您的
useffect
logicalyescorrect,我想根据参数id获取组件装载上的单个客户机,所以您的意思是我只需要添加setClient(客户机[0])代码>发送声明之后?因为当我尝试放置你的setClient(clients[0])代码>在分派语句之后,并使用[clients]
设置useffect()的第二个参数。它一遍又一遍地调用从GetClient获取数据的操作