ReferenceError:Can't find variable:weatherCondition
ReferenceError:Can't find variable:weatherCondition
我正在开发一个天气应用程序,它为 WeatherAPI 的 json 文件获取温度和天气条件。我得到错误 "ReferenceError:Can't find variable:weatherCondition"。如果我只使用温度变量,我会得到同样的错误 "ReferenceError:Can't find variable:temperature"
您可以在此处找到教程:https://blog.expo.io/building-a-minimalist-weather-app-with-react-native-and-expo-fe7066e02c09?gi=908ae5fd913d
这是App.js代码
import React from 'react';
import { StyleSheet, Text, View,Animated } from 'react-native';
import {API_KEY} from "./utils/WeatherAPIKey";
import Weather from './components/Weather';
export default class App extends React.Component {
constructor(props){
super(props);
this.state = {
isLoading:false,
temperature: 0,
weatherCondition: null,
error: null
}
}
componentDidMount() {
navigator.geolocation.getCurrentPosition(
position => {
this.fetchWeather(position.coords.latitude, position.coords.longitude);
},
error => {
this.setState({
error: 'Error Getting Weather Condtions'
});
}
);
}
fetchWeather(lat = 25, lon = 25) {
fetch(
`http://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&APPID=${API_KEY}&units=metric`
)
.then(res => res.json())
.then(json => {
//console.log(json);
this.setState({
temperature:json.main.temp,
weatherCondition:json.weather[0].main,
isLoading:false
})
});
}
render() {
const { isLoading } = this.state;
return (
<View style={styles.container}>
{isLoading ?
(
<Text>Fetching the weather</Text>
) : (
<Weather weather={weatherCondition} temperature={temperature}/>
)}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center'
}
});
This is my Weather.js code
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { MaterialCommunityIcons } from '@expo/vector-icons';
const Weather = ({temperature,weatherCondition}) => {
return (
<View style={styles.weatherContainer}>
<View style={styles.headerContainer}>
<MaterialCommunityIcons size={48} name="weather-sunny" color={'#fff'} />
<Text style={styles.tempText}>{temperature}˚</Text>
</View>
<View style={styles.bodyContainer}>
<Text style={styles.title}>weatherCondition</Text>
<Text style={styles.subtitle}>It hurts my eyes!</Text>
</View>
</View>
);
};
添加这个
render() {
const { isLoading, temperature } = this.state;
return (
<View style={styles.container}>
{isLoading ?
(
<Text>Fetching the weather</Text>
) : (
<Weather weather={weatherCondition} temperature={temperature}/>
)}
</View>
);
}
更新答案
发生了一些变化,但希望这能给您一个想法。这对我有用,它也应该对你有用。在此答案的评论中,您附上了一张带有未找到变量错误的图像。那是因为你没有将状态传递给正确的道具。请关注这个。
App.js 文件
import React from 'react';
import { StyleSheet, Text, View, Animated } from 'react-native';
import Weather from './Weather';
export default class App extends React.Component {
constructor(props){
super(props);
this.state = {
isLoading:true,
temperature: 0,
weatherCondition: null,
error: null
}
}
componentDidMount() {
// navigator.geolocation.getCurrentPosition(
// position => {
// this.fetchWeather(position.coords.latitude, position.coords.longitude);
// },
// error => {
// this.setState({
// error: 'Error Getting Weather Condtions'
// });
// }
// );
this.fetchWeather();
}
fetchWeather() {
fetch(
`http://api.openweathermap.org/data/2.5/weather?lat=25&lon=25&APPID=a934bb6a3b87e7ac54ed10969b14d80b&units=metric`
)
.then(res => res.json())
.then(json => {
//console.log(json);
this.setState({
temperature:json.main.temp,
weatherCondition:json.weather[0].main,
isLoading:false
})
});
}
render() {
const { isLoading, temperature } = this.state;
return (
<View style={styles.container}>
{isLoading ?
<Text>Fetching the weather</Text>
:
<Weather temperature={temperature}/>
}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center'
}
});
最后,这里是 Weather.js 文件
Weather.js
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
export default class Weather extends React.Component{
render(){
return (
<View>
<Text>{this.props.temperature}</Text>
</View>
);
}
}
您未定义的原因是因为您的 weather.js 文件。我不确定它看起来像什么,因为您发布了一个非常简单的示例,但我的示例应该可以帮助您更好地理解 props 的工作原理以及如何传递它。基本上 this.props.temparature
应该在 weather.js 内,从而使它成为一个易于使用的道具。您也可以按照相同的原则制作 weatherCondition 道具。
因为我不知道你的实际文件是如何布局的,所以这是一个最小的例子。希望这能解决问题。这个对我有用。 :)
我正在开发一个天气应用程序,它为 WeatherAPI 的 json 文件获取温度和天气条件。我得到错误 "ReferenceError:Can't find variable:weatherCondition"。如果我只使用温度变量,我会得到同样的错误 "ReferenceError:Can't find variable:temperature" 您可以在此处找到教程:https://blog.expo.io/building-a-minimalist-weather-app-with-react-native-and-expo-fe7066e02c09?gi=908ae5fd913d
这是App.js代码
import React from 'react';
import { StyleSheet, Text, View,Animated } from 'react-native';
import {API_KEY} from "./utils/WeatherAPIKey";
import Weather from './components/Weather';
export default class App extends React.Component {
constructor(props){
super(props);
this.state = {
isLoading:false,
temperature: 0,
weatherCondition: null,
error: null
}
}
componentDidMount() {
navigator.geolocation.getCurrentPosition(
position => {
this.fetchWeather(position.coords.latitude, position.coords.longitude);
},
error => {
this.setState({
error: 'Error Getting Weather Condtions'
});
}
);
}
fetchWeather(lat = 25, lon = 25) {
fetch(
`http://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&APPID=${API_KEY}&units=metric`
)
.then(res => res.json())
.then(json => {
//console.log(json);
this.setState({
temperature:json.main.temp,
weatherCondition:json.weather[0].main,
isLoading:false
})
});
}
render() {
const { isLoading } = this.state;
return (
<View style={styles.container}>
{isLoading ?
(
<Text>Fetching the weather</Text>
) : (
<Weather weather={weatherCondition} temperature={temperature}/>
)}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center'
}
});
This is my Weather.js code
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { MaterialCommunityIcons } from '@expo/vector-icons';
const Weather = ({temperature,weatherCondition}) => {
return (
<View style={styles.weatherContainer}>
<View style={styles.headerContainer}>
<MaterialCommunityIcons size={48} name="weather-sunny" color={'#fff'} />
<Text style={styles.tempText}>{temperature}˚</Text>
</View>
<View style={styles.bodyContainer}>
<Text style={styles.title}>weatherCondition</Text>
<Text style={styles.subtitle}>It hurts my eyes!</Text>
</View>
</View>
);
};
添加这个
render() {
const { isLoading, temperature } = this.state;
return (
<View style={styles.container}>
{isLoading ?
(
<Text>Fetching the weather</Text>
) : (
<Weather weather={weatherCondition} temperature={temperature}/>
)}
</View>
);
}
更新答案
发生了一些变化,但希望这能给您一个想法。这对我有用,它也应该对你有用。在此答案的评论中,您附上了一张带有未找到变量错误的图像。那是因为你没有将状态传递给正确的道具。请关注这个。
App.js 文件
import React from 'react';
import { StyleSheet, Text, View, Animated } from 'react-native';
import Weather from './Weather';
export default class App extends React.Component {
constructor(props){
super(props);
this.state = {
isLoading:true,
temperature: 0,
weatherCondition: null,
error: null
}
}
componentDidMount() {
// navigator.geolocation.getCurrentPosition(
// position => {
// this.fetchWeather(position.coords.latitude, position.coords.longitude);
// },
// error => {
// this.setState({
// error: 'Error Getting Weather Condtions'
// });
// }
// );
this.fetchWeather();
}
fetchWeather() {
fetch(
`http://api.openweathermap.org/data/2.5/weather?lat=25&lon=25&APPID=a934bb6a3b87e7ac54ed10969b14d80b&units=metric`
)
.then(res => res.json())
.then(json => {
//console.log(json);
this.setState({
temperature:json.main.temp,
weatherCondition:json.weather[0].main,
isLoading:false
})
});
}
render() {
const { isLoading, temperature } = this.state;
return (
<View style={styles.container}>
{isLoading ?
<Text>Fetching the weather</Text>
:
<Weather temperature={temperature}/>
}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center'
}
});
最后,这里是 Weather.js 文件
Weather.js
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
export default class Weather extends React.Component{
render(){
return (
<View>
<Text>{this.props.temperature}</Text>
</View>
);
}
}
您未定义的原因是因为您的 weather.js 文件。我不确定它看起来像什么,因为您发布了一个非常简单的示例,但我的示例应该可以帮助您更好地理解 props 的工作原理以及如何传递它。基本上 this.props.temparature
应该在 weather.js 内,从而使它成为一个易于使用的道具。您也可以按照相同的原则制作 weatherCondition 道具。
因为我不知道你的实际文件是如何布局的,所以这是一个最小的例子。希望这能解决问题。这个对我有用。 :)