Javascript Undefined不是对象(正在计算';state.markers';)
我经常面临一个错误: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,
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
问题是您需要从该函数返回初始状态。您没有这样做-您正在从该函数返回未定义的
,并在回调中执行某些操作。重写整个过程
简言之:
区域保持为单独状态
函数ExploreScreen(){
常量[region,setRegion]=useState(未定义);
常量[状态,设置状态]=使用状态({
标记:[],
类别:{
名称:“附近活动”,
图标:(
),
}
});
使用效果(){
//挂载时获取位置并设置状态
navigator.geolocation.getPosition(pos=>{
setRegion(…任何你想要的);
});
},[]);
//在此之后,效果应具有region和/或state.markers的依赖关系
}
const[state,setState]=React.useState(handleUserLocation)
makestate
指向一个函数;函数没有.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>