您的问题与使用react-router-v4(而非钩子)以编程方式进行导航有关,
在react-
router-v4中,如果Todos组件以子代或Route的形式呈现,则可以从props获取历史记录,或者从Route呈现的祖先那里获得Router的历史记录,并将它传递Router的props。但是,它没有收到路由器道具,您可以使用
withRouterHOC从中
react-router获取路由器道具并进行呼叫
props.history.push(destUrlEdit)
import React, {useState, useContext, useEffect} from 'react';import TodosContext from './context'import { withRouter } from 'react-router-dom';function Todos(props){ const [todo, setTodo] = useState("") const {state, dispatch} = useContext(TodosContext) useEffect(()=>{ if(state.currentTodo.text){ setTodo(state.currentTodo.text) } else { setTodo("") } dispatch({ type: "GET_TODOS", payload: state.todos }) }, [state.currentTodo.id]) const editRow = event =>{ let destUrlEdit = `/todos/${event.id}` let obj = {} obj.id = event.id obj.text = event.text dispatch({type:"SET_CURRENT_TODO", payload: obj}) //after dispatch I would like to redirect to another route to do the actual edit //destUrlEdit props.history.push(destUrlEdit); } return( <div> <h1>List of ToDos</h1> <h4>{title}</h4> <ul> {state.todos.map(todo => ( <li key={todo.id}>{todo.text} <button onClick={()=>{ editRow(todo)}}> </button> </li> ))} </ul> </div> )}export default withRouter(Todos);


