Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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
Javascript Undefined不是对象(正在计算';state.markers';)_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript Undefined不是对象(正在计算';state.markers';)

Javascript Undefined不是对象(正在计算';state.markers';),javascript,reactjs,react-native,Javascript,Reactjs,React Native,我经常面临一个错误:Undefined不是一个对象(评估'state.markers'),这很奇怪,我不知道为什么我一直得到它 下面是我的代码: function ExploreScreen() { const handleUserLocation = () => { navigator.geolocation.getCurrentPosition((pos) => { const newMapState = { markers,

我经常面临一个错误:Undefined不是一个对象(评估'state.markers'),这很奇怪,我不知道为什么我一直得到它

下面是我的代码:

function ExploreScreen() {

  const handleUserLocation = () => {
    navigator.geolocation.getCurrentPosition((pos) => {
      const newMapState = {
        markers,
        categories: [
          {
            name: "Nearby Events",
            icon: (
              <MaterialCommunityIcons
                style={styles.chipsIcon}
                name="near-me"
                size={18}
              />
            ),
          },
        ],
        region: {
          latitude: pos.coords.latitude,
          longitude: pos.coords.longitude,
          latitudeDelta: 0.04864195044303443,
          longitudeDelta: 0.040142817690068,
        },
      };
      alert(JSON.stringify(pos));
    });
  };

  const [state, setState] = React.useState(handleUserLocation);

  let mapIndex = 0;
  ...
函数ExploreScreen(){
常量handleUserLocation=()=>{
navigator.geolocation.getCurrentPosition((pos)=>{
常量newMapState={
标记,
类别:[
{
名称:“附近活动”,
图标:(
),
},
],
地区:{
纬度:位置坐标纬度,
经度:位置坐标经度,
latitudeDelta:0.04864195044303443,
纵向德尔塔:0.040142817690068,
},
};
警报(JSON.stringify(pos));
});
};
const[state,setState]=React.useState(handleUserLocation);
设mapIndex=0;
...
Render函数:(这只是代码的一个较短版本,我不得不删除了很多显示我可以在这里发布)

返回(
//这里有一些代码

您可以根据将函数传递给
useState
。但是,请注意,不能使用异步函数-它必须立即返回状态。正如文档所述,在计算初始状态时使用该函数被认为是昂贵的,并且您不希望每次渲染组件时都不必要地这样做d

问题是您需要从该函数返回初始状态。您没有这样做-您正在从该函数返回
未定义的
,并在回调中执行某些操作。重写整个过程

简言之:

  • 区域保持为单独状态
  • 为标记/类别创建初始状态(可以说,这些是独立的状态片段,不会一起更改)
  • 装载时,请求位置并设置区域状态变量
  • 之后的所有效果都应具有region和/或state.markers作为依赖项
  • 代码:

    函数ExploreScreen(){
    常量[region,setRegion]=useState(未定义);
    常量[状态,设置状态]=使用状态({
    标记:[],
    类别:{
    名称:“附近活动”,
    图标:(
    ),
    }
    });
    使用效果(){
    //挂载时获取位置并设置状态
    navigator.geolocation.getPosition(pos=>{
    setRegion(…任何你想要的);
    });
    },[]);
    //在此之后,效果应具有region和/或state.markers的依赖关系
    }
    
    const[state,setState]=React.useState(handleUserLocation)
    make
    state
    指向一个函数;函数没有
    .markers
    属性。你是想调用它,然后从函数返回
    newMapState
    吗?哦,哇。有趣,今天刚学了这个。你有什么建议吗?好的。我把newMapState放在handleUserLocation中,因为我想将其与附加到newMapState的某些内容一起使用,例如类别和标记…但我需要能够返回newMapState@ChrisG…当我使用
    const[state,setState]=React.useState(newMapState);
    它说找不到变量:newMapState您无法从回调返回它。但您不需要。下面是一个简单的示例:(另外:您使用的是钩子,作为初学者,您绝对应该使用类)@ChrisG-使用函数提供初始状态没有错。你关于使用类的建议也不正确。太好了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!请稍等。我只是注意到它在不显示任何内容之前先进入未定义的位置。有时它会进入正确的lat&lng,你有什么建议吗please@NelsonKehinde的一个想法是在定义区域之前不渲染地图,您可以在请求用户时只渲染加载程序或空白内容location@NelsonKehinde更新您的问题以显示渲染函数的其余部分。@NelsonKehinde在所有钩子之后,如果区域未定义,则返回加载程序组件。否则,返回您r图
    return (
        <>
          <Screen style={styles.screen}>
            <MapView
              ref={_map}
              initialRegion={region}
              style={styles.container}
            >
                          
              //some code go here
            </MapView>