React道具不确定

发布于 2025-01-23 01:25:15 字数 1625 浏览 2 评论 0原文

我非常新手反应,所以这是我的第一个问题。

我无法在儿童组成部分中访问道具。 我需要将功能从父母传递给孩子们, 从孩子那里获取数据。

浏览器控制台中的错误代码:

eppenseform.js:27未熟练的typeerror:props.saveexpensedata不是 功能 在subsithandler(eppenseform.js:27:1)

我试图将“测试”支架记录到控制台,但它也不确定。 认为道具有问题。

因此,

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;

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

I'm very new to React, so here is my first problem.

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.

Error Code in Browser Console:

ExpenseForm.js:27 Uncaught TypeError: props.onSaveExpenseData is not a
function
at 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不再见 2025-01-30 01:25:15

首先会破坏您的道具,然后使用它。此外,您的expensedata是一个对象,而save expensedatahandler是一个函数,因此当然,onsaveExpensEdata会期望孩子中的功能。

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

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.

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
や三分注定 2025-01-30 01:25:15

现在正在工作!

我的错是,我已经在app.js(主文件)而不是parent component(newexpenses.js)中渲染了子组件(eppenseform.js),
因此,我认为父母连接不存在。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文