#reactjs #react-native
Вопрос:
Мой код(краткая форма)
import..
export default function App({ navigation }) {
function HomeScreen({ navigation }) {
...
}
const [ItemURL, setItemURl] = useState('URL')
return (
<ItemContext.Provider value={ItemURL}>
...
</ItemContext.Provider>
)
}
Я пытаюсь добавить контекстный API в свое приложение. Я получаю эту ошибку при попытке добавить useState.
Полный код
export default function App({ navigation }) {
function HomeScreen({ navigation }) {
const [WantLogIn, setWantLogIn] = useState(false)
const [OpenAnimation, setOpenAnimation] = useState(0)
useEffect(() => {
...
}, [OpenSetting])
useEffect(() => {
...
}, [ItemOpen])
useEffect(() => {
...
}, [OpenAnimation])
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
...
</View>
)
}
const [loaded1] = useFonts({
Poppins_Bold: require('./assets/fonts/Poppins-Bold.ttf'),
})
if (!loaded) {
return null
} else {
setCustomText(customTextProps)
}
if (!loaded1) {
return null
}
const [ItemURL, setItemURl] = useState('URL')
return (
<ItemContext.Provider value={ItemURL}>
<ApplicationProvider {...eva} theme={{ ...eva.light, ...theme }}>
<NavigationContainer>
<Stack.Navigator headerMode='none' mode='model' screenOptions={{}}>
</Stack.Navigator>
</NavigationContainer>
</ApplicationProvider>
</ItemContext.Provider>
)
}
Это мой полный код и удалены некоторые ненужные вещи.Я использовал навигацию react в этом приложении(это создает какие-либо проблемы).
Когда я помещаю константу ItemURL
поверх другой константы функции приложения, она начинает работать.
Комментарии:
1. Можете ли вы поделиться всем своим кодом? Например, рабочий стол
2. хорошо, позвольте мне отредактировать.
3. Я добавил свой полный код. (не удалось добавить полный код, поэтому удалили некоторые ненужные вещи)
4. ваш рабочий стол находится внутри вашего приложения. Извлеките его и поместите снаружи.
5. Да, я это сделал. но не повезло
Ответ №1:
Вы используете функцию useState('URL')
после проверки loaded
. Если функция не загружена, она возвращает значение null и ничего не отображается, но также никогда не достигается последнее состояние использования.
Теперь, если шрифты загружены, возвращаемое состояние не вызывается, а вызывается состояние использования. Теперь у вас другое количество звонков с крючками, что запрещено.
Переместите состояние использования выше раннего возврата (!загружено).
export default function App({ navigation }) {
function HomeScreen({ navigation }) {
const [WantLogIn, setWantLogIn] = useState(false)
const [OpenAnimation, setOpenAnimation] = useState(0)
useEffect(() => {
...
}, [OpenSetting])
useEffect(() => {
...
}, [ItemOpen])
useEffect(() => {
...
}, [OpenAnimation])
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
...
</View>
)
}
const [loaded1] = useFonts({
Poppins_Bold: require('./assets/fonts/Poppins-Bold.ttf'),
})
const [ItemURL, setItemURl] = useState('URL') // MOVE THIS UP
if (!loaded) {
return null
} else {
setCustomText(customTextProps)
}
if (!loaded1) {
return null
}
return (
<ItemContext.Provider value={ItemURL}>
<ApplicationProvider {...eva} theme={{ ...eva.light, ...theme }}>
<NavigationContainer>
<Stack.Navigator headerMode='none' mode='model' screenOptions={{}}>
</Stack.Navigator>
</NavigationContainer>
</ApplicationProvider>
</ItemContext.Provider>
)
}