在我的 React Native 应用中,我遇到了 setState 函数未被识别为函数的问题。
我已经在应用程序根页面插入了上下文提供程序并导出了上下文属性,但它仍然不起作用。
我试图在组件上调用它,但仍然收到“setAppCompany 不是一个函数”
App.js
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import AppProviders from './mobile/src/providers/AppProviders';
import Route from './mobile/src/navigations/Route';
import Layout from './mobile/src/layout/Layout';
export default function App() {
return (
<AppProviders>
<NavigationContainer>
<Layout>
<Route />
</Layout>
</NavigationContainer>
</AppProviders>
);
}
AppProviders.js
import React from 'react';
import CompanyProvider from '../contexts/CompanyContext';
import UserProvider from '../contexts/UserContext';
const AppProviders = ({ children }) => {
return (
<CompanyProvider>
<UserProvider>{children}</UserProvider>
</CompanyProvider>
);
};
export default AppProviders;
CompanyContext.js
import React, { createContext, useState, useContext } from 'react';
export const CompanyContext = createContext();
export default function CompanyProvider({ children }) {
const [appCompanyId, setAppCompany] = useState(null);
return (
<CompanyContext.Provider value={(appCompanyId, setAppCompany)}>
{children}
</CompanyContext.Provider>
);
}
export const useCompany = () => {
const context = useContext(CompanyContext);
const { appCompanyId, setAppCompany } = context;
return { appCompanyId, setAppCompany };
}
UserContext.js
import React, { createContext, useState, useContext } from 'react';
export const UserContext = createContext();
export default function UserProvider({ children }) {
const [logged, setLogged] = useState(false);
const [userId, setUserId] = useState(null);
const [token, setToken] = useState('');
const [admin, setAdmin] = useState(false);
return (
<UserContext.Provider
value={
(logged, setLogged, userId, setUserId, token, setToken, admin, setAdmin)
}>
{children}
</UserContext.Provider>
);
}
export function useUser() {
const context = useContext(UserContext);
const {
logged,
setLogged,
userId,
setUserId,
token,
setToken,
admin,
setAdmin,
} = context;
return {
logged,
setLogged,
userId,
setUserId,
token,
setToken,
admin,
setAdmin,
};
}
TopBar.js(使用上下文属性的组件)
import React, { useState, useEffect } from 'react';
import { View, StyleSheet, Text } from 'react-native';
import { Picker } from '@react-native-picker/picker';
import { getCompaniesByUserId } from '../services/api/company.services';
import { useUser } from '../contexts/UserContext';
import { useCompany } from '../contexts/CompanyContext';
const TopBar = () => {
// Hooks ------------------------------------->
const { userId } = useUser();
const { setAppCompany } = useCompany();
const [selectedCompany, setSelectedCompany] = useState(null);
const [avaliableCompanies, setAvailableCompanies] = useState([
{ idEmpresa: 1, nomeEmpresa: 'Rooftop Bar' },
{ idEmpresa: 2, nomeEmpresa: 'Restaurante Brilhante' },
]);
useEffect(() => {
if (avaliableCompanies == null)
setAvailableCompanies(getCompaniesByUserId(userId));
if (avaliableCompanies != null && selectedCompany == null)
setSelectedCompany(avaliableCompanies[0]);
}, [avaliableCompanies, selectedCompany, userId]);
useEffect(() => {
if (selectedCompany != null) setAppCompany(selectedCompany);
}, [selectedCompany, setAppCompany]);
// JSX ------------------------------------->
return (
<View style={styles.topBar}>
<Text style={styles.title}>RoofStock</Text>
<View style={styles.selectorContainer}>
<Text style={styles.label}>Company:</Text>
<Picker
selectedValue={selectedCompany}
onValueChange={setSelectedCompany}
style={styles.picker}
dropdownIconColor="#fff">
{avaliableCompanies.map((company) => (
<Picker.Item
label={company.nomeEmpresa}
value={company.idEmpresa}
/>
))}
</Picker>
</View>
</View>
);
};
我尝试在创建的上下文中使用 setState 函数,但失败了。我原本希望使用 setState 函数来控制和管理基于这些数据的应用程序状态。