Reactjs React钩子:刷新goBack()上的数据
我有两个屏幕,A和B:Reactjs React钩子:刷新goBack()上的数据,reactjs,react-router-dom,Reactjs,React Router Dom,我有两个屏幕,A和B: A -> B B添加数据,而A有一个包含该数据的表。当我在B中添加数据时,我正在从useHistory()react钩子调用goBack()。但是,A在我向数据库添加数据时不会刷新,因为默认情况下它不应该刷新 如果我真的在B中添加了内容,我只希望A刷新。我该怎么做?如何检测何时在A中调用goBack(),并且仅在满足某些条件时更新?可能的解决方案是,您可以将组件包装到上下文-HOC。或者你可以用其他东西代替goBack,用参数推送,用状态简单HOC,传递道具 co
A -> B
B添加数据,而A有一个包含该数据的表。当我在B
中添加数据时,我正在从useHistory()
react钩子调用goBack()
。但是,A
在我向数据库添加数据时不会刷新,因为默认情况下它不应该刷新
如果我真的在
B
中添加了内容,我只希望A
刷新。我该怎么做?如何检测何时在A
中调用goBack()
,并且仅在满足某些条件时更新?可能的解决方案是,您可以将组件包装到上下文-HOC。或者你可以用其他东西代替goBack,用参数推送,用状态简单HOC,传递道具
const DataContext = React.createContext(null);
// or pass props.children to DataContext.Provider, or props to A,B...
function DataApp() {
const [refresh, setRefresh] = useState(false);
const toggleRefresh = () => { setRefresh(refresh => !refresh) };
<DataContext.Provider value={{refresh, toggleRefresh}}>
<A />
<B />
</DataContext.Provider>
}
function A() {
const { refresh, toggleRefresh } = React.useContext(DataContext);
useEffect(() => { /* Should be data refreshed? */ }, []);
}
function B() {
const { refresh, toggleRefresh } = React.useContext(DataContext);
const submitData = () => { toggleRefresh(); /* goBack() */ };
}
const DataContext=React.createContext(null);
//或将props.children传递给DataContext.Provider,或将props传递给A、B。。。
函数DataApp(){
const[refresh,setRefresh]=useState(false);
const-toggleRefresh=()=>{setRefresh(refresh=>!refresh)};
}
函数A(){
const{refresh,toggleRefresh}=React.useContext(DataContext);
useEffect(()=>{/*应刷新数据?*/},[]);
}
函数B(){
const{refresh,toggleRefresh}=React.useContext(DataContext);
const submitData=()=>{toggleRefresh();/*goBack()*/};
}
与其尝试检测事物,为什么不接受React的声明性质,并使用诸如Redux或其他状态管理库之类的工具?正如@apincik所建议的,您也可以自己利用上下文,但是为什么还要再发明轮子呢。。。