Reactjs useEffect未将数据设置为功能组件中的状态

Reactjs useEffect未将数据设置为功能组件中的状态,reactjs,redux,react-hoc,Reactjs,Redux,React Hoc,我用HOC包装了功能组件。它在api调用后返回一些道具。如何在子组件(功能)中设置状态 constwitheditHoc=(WrappedComponent,actioneffects)=>{ 类HOC扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 加载:对, }; } ExecuteAlactions=async(数据,id)=>{ 等待Promise.all(data.map(act=>this.props.dispatch(act(id))),然后(()=> this.s

我用HOC包装了功能组件。它在api调用后返回一些道具。如何在子组件(功能)中设置状态

constwitheditHoc=(WrappedComponent,actioneffects)=>{
类HOC扩展组件{
建造师(道具){
超级(道具);
此.state={
加载:对,
};
}
ExecuteAlactions=async(数据,id)=>{
等待Promise.all(data.map(act=>this.props.dispatch(act(id))),然后(()=>
this.setState({loading:false}),
);
};
componentDidMount=()=>{
const editpageId=this.props.match.params.id;
此.executealActions(actioneffects,editpageId);
};
render(){
console.log(this.state.loading);
返回(
);
}
}
返回HOC;
这是我的HOC结构。在api调用之后,数据将以redux的形式出现。 我正在使用mapToStateProp为我的功能组件获取一个道具。(react版本16.3) 请对此提出任何建议

功能部件

function ProjectDetails(props) {
  const [projectValue, setValue] = useState({});
  const [proData, setProData] = useState({ ...props.project });

  useEffect(() => {
    setProData({ props.project });//Here I need to set my data, Iam not able to set data here.

  }, []);

  return <div>{JSON.stringify(props.project)}</div>;
}
function mapStateToProps(state) {
  return {
    project: state.projects.project,
  };
}



const projectDetailsWithHocLoading = withEditHoc(ProjectDetails, [actions.apiCall()]);
export default connect(mapStateToProps, null)(projectDetailsWithHocLoading);
功能项目详细信息(道具){
const[projectValue,setValue]=useState({});
const[proData,setProData]=useState({…props.project});
useffect(()=>{
setProData({props.project});//这里我需要设置数据,我无法在这里设置数据。
}, []);
返回{JSON.stringify(props.project)};
}
函数MapStateTops(状态){
返回{
项目:state.projects.project,
};
}
const projectdetailswithhocloding=withEditHoc(ProjectDetails[actions.apiCall());
导出默认连接(MapStateTops,null)(项目详细信息加载);

我是一个反应新手。请建议一个为类组件创建MapStateTrops的好方法。 因为您使用的是钩子,所以应该使用useSelector钩子


从'react redux'导入{useSelector};
功能项目详细信息(道具){
const[projectValue,setValue]=useState({});
const proData=useSelector(state=>state.projects.project)
返回{JSON.stringify(proData)};
}
const projectdetailswithhocloding=withEditHoc(ProjectDetails,actions.apiCall());
导出默认项目详细信息,并进行加载;

为类组件创建的MapStateTrops。 因为您使用的是钩子,所以应该使用useSelector钩子


从'react redux'导入{useSelector};
功能项目详细信息(道具){
const[projectValue,setValue]=useState({});
const proData=useSelector(state=>state.projects.project)
返回{JSON.stringify(proData)};
}
const projectdetailswithhocloding=withEditHoc(ProjectDetails,actions.apiCall());
导出默认项目详细信息,并进行加载;


actioneffects
中你得到了什么?很可能你需要在useffect的依赖数组中设置
props.project
(useffect的第二个参数)。类似于:useffect(()=>{setProData({props.project})},[props.project])Hi@jure我怀疑传递useeffect的第二个参数的原因是什么,尝试一个组件将收到道具?在
actioneffects
中得到了什么?很可能需要在useeffect的依赖项数组(useeffect的第二个参数)中设置
props.project
。类似于:useeffect(()=>{setProData({props.project},[props.project])Hi@jure我怀疑传递useffect的第二个参数的原因是什么,尝试一个组件将收到props?
function ProjectDetails(props) {
  const [projectValue, setValue] = useState({});
  const [proData, setProData] = useState({ ...props.project });

  useEffect(() => {
    setProData({ props.project });//Here I need to set my data, Iam not able to set data here.

  }, []);

  return <div>{JSON.stringify(props.project)}</div>;
}
function mapStateToProps(state) {
  return {
    project: state.projects.project,
  };
}



const projectDetailsWithHocLoading = withEditHoc(ProjectDetails, [actions.apiCall()]);
export default connect(mapStateToProps, null)(projectDetailsWithHocLoading);
   import { useSelector } from 'react-redux';

   function ProjectDetails(props) {
     const [projectValue, setValue] = useState({});
     const proData = useSelector(state => state.projects.project)

     return <div>{JSON.stringify(proData)}</div>;
    }

  const projectDetailsWithHocLoading = withEditHoc(ProjectDetails,actions.apiCall()]);
  export default projectDetailsWithHocLoading;