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
return
test1
, 而
客户端[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获取数据的操作