[英]React.js Pass input value from child to Parent
Hi I'm trying to pass and render input values from AddHamster (child) component to HamsterCard Component (parent).您好我正在尝试将输入值从 AddHamster(子)组件传递并呈现到 HamsterCard 组件(父)。 I'm getting the error message: Error: Objects are not valid as a React child (found: object with keys {name, age, render}).
我收到错误消息:错误:对象作为 React 子项无效(找到:object,键为 {name, age, render})。 If you meant to render a collection of children, use an array instead.
如果您打算渲染子集合,请改用数组。
Any clue on how I could solve this?关于如何解决这个问题的任何线索?
import React, {useState} from "react"; const AddHamster = () => { const [name, setName] = useState( '') const [age, setAge] = useState('') async function postHamster(){ const newHamster = { name: name, age: Number(age), } const response = await fetch('/hamsters ', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(newHamster) }) const data = await response.json() console.log(data, "this is data id"); console.log(newHamster) } return { name, age, render: ( <div className="add-hamster"> <form onSubmit={e => { e.preventDefault(); }}> <label>Name</label> <input value={name} type="text" onChange={(e) =>setName(e.target.value)} id="addhamster" /> <label>Age</label> <input value={age} type="text" onChange={(e) =>setAge(e.target.value)} id="addhamster" /> </form> <button onClick={e => postHamster()}>Add Hamster</button> </div> )} } export default AddHamster;
AddHamster.jsx ` AddHamster.jsx`
import React, {useState, useEffect} from "react"; import './HamsterCard.css'; import Hamster from './Hamster'; import AddHamster from './AddHamster.jsx'; const HamsterCard = () => { const {render, name, age} = AddHamster(); const [hamsters, setHamsters] = useState([]) useEffect(() => { async function get(){ const response = await fetch('/hamsters', {method: 'GET',}) //fetchar och tar emot data i reponsens const data = await response.json() //Data setHamsters(data) console.log(data) } get() }, [] ); return ( //pass the id inside of the delete function to which id to delete <div className="container"> <div className="hamster-card"> {hamsters.map((hamster) => ( <Hamster hamster={hamster} key={hamster.id} {...{name, age}}/> )) } {render} </div> </div> ) } export default HamsterCard;
HamsterCard.jsx仓鼠卡片.jsx
import React, {useState} from "react"; const Hamster = (props) => { const [hamsterDeleted, setHamsterDeleted] = useState(false) async function deleteHamster(id) { const response = await fetch(`/hamsters/${id}`, { method: "DELETE" }); setHamsterDeleted(true) } return ( hamsterDeleted? null: ( <div> <button onClick={() => deleteHamster(props.hamster.id)}>Delete</button> <h2>{props.hamster.name}</h2> <p>Ålder:{props.hamster.age}</p> <p>Favorit mat:{props.hamster.favFood}</p> <p>Matcher:{props.hamster.games}</p> <img src={'./img/' + props.hamster.imgName} alt="hamster"/> ) </div> )) } export default Hamster;
import React, {useState} from "react";
const AddHamster = () => {
const [name, setName] = useState( '')
const [age, setAge] = useState('')
async function postHamster(){
const newHamster = {
name: name,
age: Number(age),
}
const response = await fetch('/hamsters ', {method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(newHamster)
})
const data = await response.json()
console.log(data, "this is data id");
console.log(newHamster)
}
return {
name,
age,
render: (
<div className="add-hamster">
<form onSubmit={e => { e.preventDefault(); }}>
<label>Name</label>
<input value={name}
type="text"
onChange={(e) =>setName(e.target.value)}
id="addhamster" />
<label>Age</label>
<input value={age}
type="text"
onChange={(e) =>setAge(e.target.value)}
id="addhamster" />
</form>
<button onClick={e => postHamster()}>Add Hamster</button>
</div>
)}
}
export default AddHamster;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
You are exporting a object from AddHamster
component.您正在从
AddHamster
组件导出 object。
Error: Objects are not valid as a React child (found: object with keys {name, age, render})
错误:对象作为 React 子项无效(找到:object,键为 {name, age, render})
As your error message says Objects are not valid as React Child
, you cannot export object from React component and render
is a method used in class components.由于您的错误消息显示
Objects are not valid as React Child
,您无法从 React 组件导出 object 并且render
是 class 组件中使用的方法。
If you want to access the child data from parent, lift the name and age state from AddHamster
(I have combined both the name and age into a single object) to HamsterCard
and invoke the AddHamster
as <AddHamster/>
inside the return of a function.如果您想从父级访问子级数据,请将名称和年龄 state 从
AddHamster
(我已将名称和年龄合并到一个对象中)提升到HamsterCard
,并在 function 的返回中调用AddHamster
作为<AddHamster/>
.
AddHamster添加仓鼠
const AddHamster = ({onChange,value}) => {
async function postHamster() {
const newHamster = {
name: value.name,
age: Number(value.age)
};
const response = await fetch("/hamsters ", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(newHamster)
});
const data = await response.json();
console.log(data, "this is data id");
console.log(newHamster);
}
return (
<div className="add-hamster">
<form
onSubmit={(e) => {
e.preventDefault();
}}
>
<label>Name</label>
<input
value={value.name}
type="text"
name="name"
onChange={onChange}
id="addhamster"
/>
<label>Age</label>
<input
value={value.age}
type="text"
name="age"
onChange={onChange}
id="addhamster"
/>
</form>
<button onClick={(e) => postHamster()}>Add Hamster</button>
</div>
);
};
HamsterCard仓鼠卡
const HamsterCard = () => {
const [hamsters, setHamsters] = useState([])
const [value,setValue] = useState({name:'',age:''})
useEffect(() => {
async function get(){
const response = await fetch('/hamsters', {method: 'GET',})
//fetchar och tar emot data i reponsens
const data = await response.json() //Data
setHamsters(data)
console.log(data)
}
get()
}, [] );
const onChange = (e) => {
setValue(currValue => ({...currValue,[e.target.name]: e.target.value}))
}
return (
//pass the id inside of the delete function to which id to delete
<div className="container">
<div className="hamster-card">
{hamsters.map((hamster) => (
<Hamster hamster={hamster}
key={hamster.id} {...value}/>
))
}
<AddHamster onChange={onChange} value={value}/>
</div>
</div>
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.