首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何传递此错误无效钩子调用。钩子只能在函数组件的主体内调用。我正在使用React18

如何传递此错误无效钩子调用。钩子只能在函数组件的主体内调用。我正在使用React18
EN

Stack Overflow用户
提问于 2022-09-01 10:00:46
回答 1查看 24关注 0票数 -1

这是密码

代码语言:javascript
复制
import { connect } from "react-redux";
import { useParams } from "react-router-dom";
import ExpenseForm from "./ExpenseForm";
import { editExpense, removeExpense } from '../actions/expenses';
import {useNavigate} from 'react-router-dom';
//import { withRouter } from "react-router-dom";



function EditExpensePage (props){
 const { id } = useParams();
const navigate = useNavigate()
 return(
   <div>
           <ExpenseForm 
           expense={props.expense}
           onSubmit={(expense) =>{
             props.dispatch(editExpense(id,expense))
             navigate('/');
           }}
           />

         <button onClick={()=>{
          props.dispatch(removeExpense({id: props.expense.id}));
          navigate('/');
       }}>Remove</button>
         </div>

         
 );
};

function MapStateToProps(state){
 const { id } = useParams();
 return{
   expense: state.expenses.find((expense)=> expense.id ===  id)
 };
};

   

  export default connect(MapStateToProps)(EditExpensePage);

我正在尝试用id编辑费用,以便它能够呈现一个包含已编辑项的组件。到目前为止,一切都在正常工作,但是在编辑完字段之后,组件不会重发,它会在控制台上返回一个错误。这是错误无效的钩子调用。只能在函数组件的主体内调用钩子。

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 10:09:07

造成此错误的原因是您在MapStateToProps中使用了MapStateToProps,而不能在MapStateToProps中使用。你可以这样做:

代码语言:javascript
复制
function MapStateToProps(state,ownProps){
 const { id } = ownProps.match.params;
 return{
   expense: state.expenses.find((expense)=> expense.id ===  id)
 };
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73567516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档