【发布时间】:2021-09-08 16:21:05
【问题描述】:
我一直在尝试了解如何在 nextjs 中处理环境变量,但我仍然不明白。我只是想从下面的代码中隐藏我的 API 密钥。据我了解,我只能通过使用 getServerSideProps 或 getStaticProps 来做到这一点。如果是这样的话,尽管我仍然不知道应该如何相应地修改我的代码
import { createContext, useState, useEffect } from 'react';
const WeatherContext = createContext({
searchLocation: (input) => {},
btnHandler: (input) => {},
weather: '',
isLoading: true,
});
export function WeatherContextProvider(props) {
const [weather, setWeather] = useState({});
const [city, setCity] = useState('');
const [loading, setLoading] = useState(true);
const [error, setError] = useState(false);
const [unit, setUnit] = useState('metric');
const [searchInput, setSearchInput] = useState('');
const btnHandler = () => {
if (unit === 'metric') {
setUnit('imperial');
} else {
setUnit('metric');
}
};
const searchLocation = async (input = searchInput, units = unit) => {
if (loading) {
input = 'London';
}
try {
const firstResponse = await fetch(
`https://api.openweathermap.org/data/2.5/weather?q=${input}&units=${units}&appid=KEY`
);
const firstData = await firstResponse.json();
if (!firstResponse.ok) {
setError(true);
throw new Error('Something went wrong');
}
let lon = firstData.coord.lon;
let lat = firstData.coord.lat;
const response = await fetch(
`https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&units=${units}&exclude=&appid=KEY`
);
const data = await response.json();
if (!response.ok) {
setError(true);
throw new Error('Something went wrong');
}
setWeather(data);
setCity(firstData.name + ', ' + firstData.sys.country);
setSearchInput(firstData.name);
setLoading(false);
setError(false);
} catch (error) {
setError(error.message);
console.log(error);
}
};
useEffect(() => {
searchLocation();
}, [unit, searchInput]);
const context = {
searchLocation: searchLocation,
city: city,
weather: weather,
isLoading: loading,
error: error,
btnHandler: btnHandler,
unit: unit,
searchInput: searchInput,
};
return (
<WeatherContext.Provider value={context}>
{props.children}
</WeatherContext.Provider>
);
}
export default WeatherContext;
【问题讨论】:
-
您将函数添加到文件中,检索值,然后它将在道具中。或者您可以使用
NEXT_PUBLIC_xxx。 nextjs.org/docs/basic-features/environment-variables, nextjs.org/docs/basic-features/…