reactjs - Axios 发布请求未保存
问题描述
完整代码我正在使用 react 和 axios 创建一个食谱应用程序。当我尝试通过在 form.js 中提交表单来添加新配方时,它不会被保存并与其他配方一起显示,它只会在控制台中打印。我想它与axios有关。有什么想法吗?我会非常感谢任何建议。
表单.js
import React from 'react'
import './Form.css'
import {RecipeContext} from './RecipeContext';
import {useContext,useState} from 'react';
import axios from 'axios';
function Form() {
const [nazev,setNazev]=useState('');
const[uvodni,setUvodni]=useState('');
const[ingredience,setIngredience]=useState('');
const[postup,setPostup]=useState('');
const[time,setTime]=useState(0);
const [score,setScore]=useState(0);
const{recipes,setRecipes}=useContext(RecipeContext)
const onSubmit=e=>{
const newRecipe={id:Math.floor(Math.random() * 100000000),
description:postup,name:nazev,duration:time,info:uvodni,score:+score}
e.preventDefault()
axios.post("https://cookbook.ack.ee/api/v1/recipes", newRecipe)
.then(res => setRecipes(res.data))
.catch(error => console.log(error));
}
return (
<>
<button className="pridat" onClick={onSubmit}>+</button>
<form className="form" >
<p className="nazev">Název receptu</p>
<input type="text" value={nazev}
onChange={(e) => setNazev(e.target.value)}/>
<input type="text" className="uvodni" placeholder="Úvodní text"
value={uvodni}
onChange={(e) => setUvodni(e.target.value)}/>
<h2>Ingredience</h2>
<input placeholder="Vaše ingredience" type="text"
value={ingredience}
onChange={(e) => setIngredience(e.target.value)}/>
<button>+ Přidat</button>
<input type="text" className="postup" placeholder="Postup"
value={postup}
onChange={(e) => setPostup(e.target.value)}/>
<input type="text" placeholder="Čas" className="cas" value={time}
onChange={(e) => setTime(e.target.value)}/>
</form>
</>
)
}
export default Form
食谱上下文.js
import React,{useState,useEffect,createContext,useReducer} from 'react';
import axios from 'axios';
import AppReducer from './AppReducer'
export const RecipeContext=createContext([[],() => {}]);
export default function RecipeProvider(props) {
const[recipes,setRecipes]=useState([])
const[state,dispatch]=useReducer(AppReducer,recipes)
function addRecipe(id){
dispatch({
type:'ADD_RECIPE',
payload:id
})
}
useEffect(() => {
axios.get('https://cookbook.ack.ee/api/v1/recipes?limit=10&offset=0')
.then(res=>setRecipes(res.data))
console.log(recipes)
})
return (
<RecipeContext.Provider value={{recipes,setRecipes,addRecipe}}>
{props.children}
</RecipeContext.Provider>
)
}
食谱列表.js
import {RecipeContext} from './RecipeContext';
import {useContext} from 'react';
import Recipe from './Recipe';
import './RecipeList.css'
import {Link} from 'react-router-dom'
function RecipeList() {
const {recipes}=useContext(RecipeContext)
return (
<>
<div className="navbar">
<h1>Recepty</h1>
<h3>Počet receptů:{recipes.length}</h3>
<Link to="/pridat-recept"> <h2 className="plus">+</h2></Link>
</div>
<div className="recipe-list">
{recipes.map(item=>(
<Recipe name={item.name} id={item.id} duration={item.duration} score={item.score} key={item.id}/>
))}
</div>
</>
);
}
export default RecipeList;
解决方案
推荐阅读
- javascript - 如何在高度规范化的存储库中呈现书籍章节中的内容
- r - 如何创建显示特定离子的时间范围或确切时间的图表?
- sapui5 - 指导如何在 BW/4HANA 中创建自定义磁贴
- c# - 在第一次单击时删除条目文本
- javascript - 如何解决 Uncaught (in promise) NavigationDuplicated:避免到当前位置的冗余导航:
- css - 如何在 React 中监听页面 url 变化?
- jupyter-lab - 如何调试 JupyterLab 服务器扩展
- python - 有没有办法使用变量从 mysql 获取数据并能够在登录系统的 if 语句中使用它
- c++ - 如何从用户那里获取多个数字并将偶数相加并乘以奇数?
- r - 在 R 中重命名数据