简体   繁体   English

React 道具未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM