如何重置来回切换 React Native 之间的倒计时
How to reset countdown between switching back and forth React Native
我有一个包含两个页面的应用程序,它们都显示 countdown。显示时的每个倒计时都以开始时配置的值开始。如果当前显示的倒计时达到零,则会显示其他倒计时的页面。它应该来回走动。我可以在两个页面之间切换,但我不知道如何重置倒计时。在我的例子中,倒计时达到零并且来回切换时不会再次开始。
第一页
const Page1 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page2");
}}
/>
</View>
);
};
第二页
const Page2 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page1");
}}
/>
</View>
);
};
如何修改在倒计时 运行 倒数后,来回切换时总是在计数器中使用 someValueConfiguredAtTheBeginning
而不是零的代码?
您可以使用导航侦听器了解屏幕何时更改
const [SomeValueConfiguredAtTheBeginning, setSomeValueConfiguredAtTheBeginning] = useState(90)
useEffect(() => {
//create a listener everytime your screen is not focus and reset your countdown
navigation.addListener('blur', () => {
//here set your state to the original value;
SetSomeValueConfiguredAtTheBeginning(90);
});
return () =>{
//when component will unmounted remove the listener
navigation.removeListener('blur', () => {});
};
}, [navigation]);
解决方案
我刚刚创建了一个全局状态,我将每个 onFinish
上的存储变量增加一个。通过状态更新整个组件被重新渲染。
const Page1 = ({ navigation }) => {
const [rerender, setRerender] = useContext(Renderer); /*init of global state*/
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page2"); setRerender(rerender+1)
}} /*increase global state on every onFinish by one*/
/>
</View>
);
};
第二页
const Page2 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page1");
}}
/>
</View>
);
};
我有一个包含两个页面的应用程序,它们都显示 countdown。显示时的每个倒计时都以开始时配置的值开始。如果当前显示的倒计时达到零,则会显示其他倒计时的页面。它应该来回走动。我可以在两个页面之间切换,但我不知道如何重置倒计时。在我的例子中,倒计时达到零并且来回切换时不会再次开始。
第一页
const Page1 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page2");
}}
/>
</View>
);
};
第二页
const Page2 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page1");
}}
/>
</View>
);
};
如何修改在倒计时 运行 倒数后,来回切换时总是在计数器中使用 someValueConfiguredAtTheBeginning
而不是零的代码?
您可以使用导航侦听器了解屏幕何时更改
const [SomeValueConfiguredAtTheBeginning, setSomeValueConfiguredAtTheBeginning] = useState(90)
useEffect(() => {
//create a listener everytime your screen is not focus and reset your countdown
navigation.addListener('blur', () => {
//here set your state to the original value;
SetSomeValueConfiguredAtTheBeginning(90);
});
return () =>{
//when component will unmounted remove the listener
navigation.removeListener('blur', () => {});
};
}, [navigation]);
解决方案
我刚刚创建了一个全局状态,我将每个 onFinish
上的存储变量增加一个。通过状态更新整个组件被重新渲染。
const Page1 = ({ navigation }) => {
const [rerender, setRerender] = useContext(Renderer); /*init of global state*/
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page2"); setRerender(rerender+1)
}} /*increase global state on every onFinish by one*/
/>
</View>
);
};
第二页
const Page2 = ({ navigation }) => {
return (
<View>
<CountDown
size={40}
until={someValueConfiguredAtTheBeginning}
timeToShow={["S"]}
onFinish={() => {
navigation.navigate("Page1");
}}
/>
</View>
);
};