Reactjs React Native:放置全局状态变量的位置
我正在开发我的第一个React Native,我再次需要一些帮助。 我的应用程序有一个状态-sport,它对组件、屏幕等都很重要。因此,我将加载不同的样式、图像和api信息。 将有一个模式,用户可以从中更改运动。模式现在是标题组件的一部分,标题组件是屏幕组件的一部分 所以我的问题是如何或者在哪里放置这个运动状态变量,这样我就可以在任何地方访问它,并在更改时更新新的样式等等 该应用程序的概述如下所示: App.jsReactjs React Native:放置全局状态变量的位置,reactjs,react-native,Reactjs,React Native,我正在开发我的第一个React Native,我再次需要一些帮助。 我的应用程序有一个状态-sport,它对组件、屏幕等都很重要。因此,我将加载不同的样式、图像和api信息。 将有一个模式,用户可以从中更改运动。模式现在是标题组件的一部分,标题组件是屏幕组件的一部分 所以我的问题是如何或者在哪里放置这个运动状态变量,这样我就可以在任何地方访问它,并在更改时更新新的样式等等 该应用程序的概述如下所示: App.js import AppContext from './utility/con
import AppContext from './utility/context';
export default function App() {
const [sport, setSport] = React.useState('soccer');
const state = {sport, setSport};
return (
<AppContext.Provider sport={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
Screen.js
export default function Screen ({children}) {
return (
<>
<Header />
<SafeAreaView style={styles.screen}>
<View style={styles.container}>{ children }</View>
</SafeAreaView>
<TabNavigator i18n={i18n}/>
</>
);
}
这里的运动状态是硬编码的,因为我还不知道如何继续
我听说过Redux,但我还没有使用它,所以如果有任何解决方案不使用Redux,我将不胜感激
提前谢谢你 您可以使用 您只需在app.js中拥有一个状态,并使用上下文在应用程序中需要的任何位置访问它 首先,您需要创建上下文。如果它是一个单独的文件就更好了
const AppContext = React.createContext({sport:'value',setSport=()=>{}});
这里的默认值是选项,但在使用typescript避免警告时特别首选
现在你必须在app.js中使用它,如下所示
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
你可以像下面那样展示它
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
{sport}
或者设置如下
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
{setSport('value')}>
此示例仅针对一个字符串,但您甚至可以拥有一个对象。您可以使用 您只需在app.js中拥有一个状态,并使用上下文在应用程序中需要的任何位置访问它 首先,您需要创建上下文。如果它是一个单独的文件就更好了
const AppContext = React.createContext({sport:'value',setSport=()=>{}});
这里的默认值是选项,但在使用typescript避免警告时特别首选
现在你必须在app.js中使用它,如下所示
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
你可以像下面那样展示它
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
{sport}
或者设置如下
export default function App() {
const [sport,setSport] = React.useState('value');
const state={sport,setSport};
...
return (
<AppContext.Provider value={state}>
<OfflineNotice />
<Screen />
</AppContext.Provider>
);
}
<Text>{sport}</Text>
<Button title="Set Value" onPress={()=>{setSport('value')}}>
{setSport('value')}>
这个例子只是一个字符串,但您甚至可以拥有一个对象。您可以在任何.js文件中存储全局变量。如果一个
上下文开始看起来像一个服务,那么可以使用它。要对更改做出反应,您需要使用事件。然后听起来就像是重新实现Redux。为什么要这样做呢?您可以在任何.js文件中存储全局变量。如果一个上下文开始看起来像一个服务,那么可以使用它。要对更改做出反应,您需要使用事件。然后听起来就像是重新实现Redux。为什么要这样做?我已经理解了这个想法,但我在实施它时面临着问题。我已将AppContext放在一个单独的文件中。还好吗,我是怎么做到的?我已经更新了我的代码,但现在我得到一个错误:元素类型无效,应该是字符串或类/函数。。。检查Expoot的渲染方法。怎么了?你出口了吗?如果您喜欢,可以参考此示例代码。它显示了导航的不同功能,但也涵盖了您可以从中获得想法的上下文。这是出口,这是在我的最后一行不同的名称,这是造成问题:)我理解的想法,但我面临的问题,以实施它。我已将AppContext放在一个单独的文件中。还好吗,我是怎么做到的?我已经更新了我的代码,但现在我得到一个错误:元素类型无效,应该是字符串或类/函数。。。检查Expoot的渲染方法。怎么了?你出口了吗?如果您喜欢,可以参考此示例代码。它显示了导航的不同功能,但也涵盖了您可以从中获得想法的上下文。这是出口,它在我的最后一行中使用了不同的名称,这导致了问题:)