首页
学习
活动
专区
圈层
工具
发布

上下文
EN

Stack Overflow用户
提问于 2020-06-22 17:16:12
回答 1查看 424关注 0票数 0

我在开发应用程序,用钩子,我被卡住了。

我不知道为什么,但我的组件没有从我的上下文组件下载状态,或者我的初始状态没有正确更新。贝娄,我插入了几个截图从我的应用程序。

上下文组件

代码语言:javascript
复制
import React, { createContext, useState } from 'react';

export const WeatherDataContext = createContext();

const WeatherDataContextProvider = (props) => {
    const [weather, setWeather] = useState(
        {
            city: null,
            temp: null
        }
    )
    const addWeather = (city, temp) => {
        setWeather({
            city,
            temp
        })
    }
    
    return (
        <WeatherDataContext.Provider value={{weather, addWeather}}>
            {props.children}
        </WeatherDataContext.Provider>
    )
}

export default WeatherDataContextProvider

表单- axios -组件:

代码语言:javascript
复制
import React, {useContext, useState} from 'react';
import { WeatherDataContext } from '../context/WeatherDataContext';
import axios from 'axios'
import {Link} from 'react-router-dom'


const WeatherForm = () => {
    const {addWeather} = useContext(WeatherDataContext);
    const [value, setValue] = useState('')

    const handleChange = (e) => {
        e.preventDefault();
        axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${value}&appid=${KEY}&units=metric`)
            .then(res => {
                
                
               addWeather(res.data.name, res.data.main.temp)
                
            })
      
    }

    return (
        <div class='weather-form'>
            <form onSubmit={handleChange}>
                <input placeholder='City' onChange={(e) => setValue(e.target.value)} value={value} required/>
                <Link to='/weather'><button>Search</button></Link>
                
            </form>
        </div>
    )
}

export default WeatherForm

和我想使用更新状态的最后一个组件

代码语言:javascript
复制
import React, {useContext, useState} from 'react';
import { WeatherDataContext } from '../context/WeatherDataContext';

const WeatherFront = () => {
    const {weather} = useContext(WeatherDataContext)
    
    console.log(weather)
    return (
        <div class='weather-front'>
            <h1>City: {weather.city}, Temperatura: {weather.temp}</h1>
        </div>
    )
}

export default WeatherFront
EN

回答 1

Stack Overflow用户

发布于 2020-06-22 19:47:02

问题可能是你没有提交表格。

代码语言:javascript
复制
 <Link to='/weather'><button>Search</button></Link>

只需导航到WeatherFront

你可以试试

代码语言:javascript
复制
import { useHistory } from "react-router-dom";
...
const WeatherForm = () => {
    const history = useHistory()
    const {addWeather} = useContext(WeatherDataContext)
    const [value, setValue] = useState('')

    const handleChange = (e) => {
        e.preventDefault();
        axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${value}&appid=${KEY}&units=metric`)
            .then(res => {
               addWeather(res.data.name, res.data.main.temp)
               history.push('/weather')
            })
      
    }

    return (
        <div class='weather-form'>
            <form onSubmit={handleChange}>
                <input placeholder='City' onChange={(e) => setValue(e.target.value)} value={value} required/>
                <input type="submit" value="Search" />
            </form>
        </div>
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62519938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档