Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应全局变量中的本机更新状态更改_Reactjs_React Native - Fatal编程技术网

Reactjs 反应全局变量中的本机更新状态更改

Reactjs 反应全局变量中的本机更新状态更改,reactjs,react-native,Reactjs,React Native,我创建了一个组件,其中有一个按钮和一个文本。我创建了一个名为global.js的js文件,该文件存储设备类型。现在,当我按下按钮时,我调用了一个在不同文件上创建的函数。此函数用于将全局变量device_type更新为Android或IOS。当全局变量发生变化时,它应该反映在我的组件屏幕中,并更新文本字段。我怎样才能做到呢 让我详细解释一下。 首先,我创建了一个组件 import React, { useState } from 'react' import { View, Text, Style

我创建了一个组件,其中有一个按钮和一个文本。我创建了一个名为global.js的js文件,该文件存储设备类型。现在,当我按下按钮时,我调用了一个在不同文件上创建的函数。此函数用于将全局变量device_type更新为Android或IOS。当全局变量发生变化时,它应该反映在我的组件屏幕中,并更新文本字段。我怎样才能做到呢

让我详细解释一下。 首先,我创建了一个组件

import React, { useState } from 'react'
import { View, Text, StyleSheet, TextInput, Button, Keyboard } from 'react-native'
import checkDevice from './CheckDevice'
import globals from './globals'

//Componet screen which will display on device
const checkDeviceType = () =>{
    const [deviceType,setDeviceType] = useState(globals.devive_type)

useEffect ( ()=>{
}[deviceType])
    return(
        <View>
<Button title = 'Save Post' onPress = {()=> checkDevice.checkType()}/>
<Text> {dviceType} </Text>
</View>
    )
}

const styles = StyleSheet.create({

})

export default EditScreen

//Function to check deviceType create in separate file
import globals from './globals'
const checkDevice = {
checkType = () =>{
  call method to get device type
  globals.devive_type = 'Android' 
}
import React,{useState}来自“React”
从“react native”导入{视图、文本、样式表、文本输入、按钮、键盘}
从“./checkDevice”导入checkDevice
从“./globals”导入全局
//将在设备上显示的复合屏幕
常量检查设备类型=()=>{
const[deviceType,setDeviceType]=useState(globals.deviceType)
useffect(()=>{
}[设备类型])
返回(
checkDevice.checkType()}/>
{dviceType}
)
}
const styles=StyleSheet.create({
})
导出默认编辑屏幕
//函数检查单独文件中创建的deviceType
从“./globals”导入全局
常量检查设备={
检查类型=()=>{
调用方法以获取设备类型
globals.devive_type='Android'
}
现在,当我点击按钮时,文本


目前,我正在使用回调函数。但我认为这不是正确的方法

如果全局变量是在组件的任何父组件(包含按钮和文本字段)中定义的,那么您应该能够作为组件中的道具访问它

你能像这样分享你的代码吗?它很混乱。 如果你还有任何疑问,请写信给我。 希望这会有所帮助。
谢谢

deepak,通过使用回调函数,它工作正常吗?回调函数没有坏处。是的,但是一旦单击我调用调用另一个函数的函数。所以我必须将回调参数调用传递给每个调用函数。是的,那么有什么问题吗?react建议传递回调函数的方式很有趣,但是目前,我从问题中了解到,问题是您没有真正使组件重新渲染。它确实使用按钮单击更改了全局变量。但要查看效果,您需要使重新渲染器成为组件。如果您希望在不使用大型库的情况下保持全局状态,请查看
https://github.com/andregardi/use-global hook
只需几行代码,即useState和USEFACTION,就可以为您解决问题。@subhandukundu您是对的。由于全局变量在其他文件中声明,因此组件不会重新呈现。根据代码,我们无法知道设备类型变量已更改,我们需要调用setDeviceType函数。