这是密码
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编辑费用,以便它能够呈现一个包含已编辑项的组件。到目前为止,一切都在正常工作,但是在编辑完字段之后,组件不会重发,它会在控制台上返回一个错误。这是错误无效的钩子调用。只能在函数组件的主体内调用钩子。
发布于 2022-09-01 10:09:07
造成此错误的原因是您在MapStateToProps中使用了MapStateToProps,而不能在MapStateToProps中使用。你可以这样做:
function MapStateToProps(state,ownProps){
const { id } = ownProps.match.params;
return{
expense: state.expenses.find((expense)=> expense.id === id)
};
};https://stackoverflow.com/questions/73567516
复制相似问题