[英]React props are undefined
I'm very new to React, so here is my first problem.我是 React 的新手,所以这是我的第一个问题。
I can't access my props in a children component.我无法在子组件中访问我的道具。 I need to pass a function from the parent to the children, to get Data from the Children.我需要将 function 从父级传递给子级,以从子级获取数据。
Error Code in Browser Console:浏览器控制台中的错误代码:
ExpenseForm.js:27 Uncaught TypeError: props.onSaveExpenseData is not a function at submitHandler (ExpenseForm.js:27:1) ExpenseForm.js:27 Uncaught TypeError: props.onSaveExpenseData 不是 function 在 submitHandler (ExpenseForm.js:27:1)
I've tried to log a "test" prop to the console, but its also undefined.. so i think that something is wrong with the props..我试图在控制台上记录一个“测试”道具,但它也未定义..所以我认为道具有问题..
Heres my parent:这是我的父母:
import React from 'react';
import ExpenseForm from './ExpenseForm';
const NewExpense = () => {
const saveExpenseDataHandler = enteredExpenseData => {
const expenseData = {
...enteredExpenseData,
id: Math.random().toString,
};
console.log(expenseData);
};
return (
<div>
<ExpenseForm onSaveExpenseData={saveExpenseDataHandler} test="test" />
</div>
);
};
export default NewExpense;
And this is my children component:这是我的孩子组件:
import React, { useState } from 'react';
function ExpenseForm(props) {
const [enteredTitle, setEnteredTitle] = useState('');
const [enteredAmount, setEnteredAmount] = useState('');
const [enteredDate, setEnteredDate] = useState('');
const titleChangeHandler = e => {
setEnteredTitle(e.target.value);
};
const amountChangeHandler = e => {
setEnteredAmount(e.target.value);
};
const dateChangeHandler = e => {
setEnteredDate(e.target.value);
};
const submitHandler = e => {
e.preventDefault();
const expenseData = {
title: enteredTitle,
amount: enteredAmount,
date: new Date(enteredDate),
};
props.onSaveExpenseData(expenseData);
console.log(props.test);
setEnteredTitle('');
setEnteredAmount('');
setEnteredDate('');
};
+ return
Firstly destructure your props and then use it.首先破坏你的道具然后使用它。 Also, your expenseData is an object while saveExpenseDataHandler is a function so ofcourse onSaveExpenseData will expect a function in the child.此外,您的费用数据是 object,而 saveExpenseDataHandler 是 function,因此当然 onSaveExpenseData 将期望子项中的 function。
import React, { useState } from 'react';
function ExpenseForm(props) {
const {onSaveExpenseData, test} = props
const [enteredTitle, setEnteredTitle] = useState('');
const [enteredAmount, setEnteredAmount] = useState('');
const [enteredDate, setEnteredDate] = useState('');
const titleChangeHandler = e => {
setEnteredTitle(e.target.value);
};
const amountChangeHandler = e => {
setEnteredAmount(e.target.value);
};
const dateChangeHandler = e => {
setEnteredDate(e.target.value);
};
const submitHandler = e => {
e.preventDefault();
const expenseData = {
title: enteredTitle,
amount: enteredAmount,
date: new Date(enteredDate),
};
onSaveExpenseData(expenseData);
console.log(test);
setEnteredTitle('');
setEnteredAmount('');
setEnteredDate('');
};
return
It's working now!它现在工作了!
My fault was that I've rendered the child component(ExpenseForm.js) in the app.js (main file) instead of the parent component (NewExpenses.js), so I think the parent-children-connection was not there.我的错误是我在 app.js(主文件)中呈现了子组件(ExpenseForm.js)而不是父组件(NewExpenses.js),所以我认为父子连接不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.