使用React功能组件和Typescript,使用useHistory钩子与RouteComponentProps(反应路由器v5.1)之间有什么区别吗?
使用RouteComponentProps的示例:
import { RouteComponentProps } from 'react-router-dom';
interface PropsType extends RouteComponentProps {
text: string;
}
const MyFunctionalComponent = ({
text,
history
}: PropsType) => {
};
使用useHistory的示例:
import { useHistory } from 'react-router-dom';
interface PropsType {
text: string;
}
const MyFunctionalComponent = ({
text
}: PropsType) => {
const history = useHistory();
};
答案 0 :(得分:0)
我的处境完全相同,我想与您分享我的结论。
首先,这两种方法的程序化导航的行为是相同的,因为它们都使用相同的history
实例,但是使用方式有所不同他们:
使用history
的成员RouteComponentProps
会强制您使用props在组件树中一直进行钻取。这种方法没有错,但是如果您的组件树长大,您可能会发现自己钻穿了许多层组件。
使用useHistory
钩子可以避免先前的道具钻探,而仅允许您在任何功能组件中使用history
实例。请注意,this hook is a quick stopgap for a future hook和最终将由useNavigate
钩替换。
就个人而言,我发现useHistory
为长组件树提供了一种更干净,更易读的解决方案,但是如果组件是封闭的或直接的,我会继续使用history
的{{1}}实例RouteComponentProps
组件的子代。