javascript - react : how to lift props up to parent component?

标签 javascript reactjs react-hooks

我是 React 新手,正在学习教程。

我正处于需要将 props 从子组件提升到父组件的阶段。目前,我在父组件上有一个简单的函数,它只是 console.logs 从子组件中检索到的值。

但是,它不起作用。我刚刚在 console.log 中得到 undefined 。我不确定我做错了什么,因为它看起来与教程中的示例相同。

谁能帮帮我吗?

这是我的父组件:

import React from 'react';
import ExpensesFilter from '../ExpensesFilter/ExpensesFilter';
import ExpenseItem from "./ExpenseItem";
import Card from "../Ui/Card";
import './Expenses.css';

const Expense = (props) => {

  const yearChangeHandler = (chosenYear) => {
    console.log(chosenYear); // Returns Undefined
  }

  return (
    <div>
      <ExpensesFilter onYearChange={yearChangeHandler}/>
      <Card className="expenses">
        <ExpenseItem title={props.items[0].title} amount={props.items[0].amount} date={props.items[0].date} />
    </div>
  );
}

export default Expense;

还有我的子组件:

import React, { useState } from 'react';

import './ExpensesFilter.css';

const ExpensesFilter = (props) => {
  const [selectedYear, setSelectedYear] = useState('');
  const yearChangeHandler = (event) => {
    const chosenYear = setSelectedYear(event.target.value);
    props.onYearChange(chosenYear); 
  };

  return (
    <div className='expenses-filter'>
      <div className='expenses-filter__control'>
        <label>Filter by year</label>
        <select onChange={yearChangeHandler}>
          <option value='2022'>2022</option>
          <option value='2021'>2021</option>
          <option value='2020'>2020</option>
          <option value='2019'>2019</option>
        </select>
      </div>
    </div>
  );
};

export default ExpensesFilter;

我的目标是在父组件中console.log选定的年份。任何帮助表示赞赏。谢谢!

最佳答案

setSelectedYear 返回voiduseStatesetState 的签名是:

function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];

type Dispatch<A> = (value: A) => void;

尝试

import React, { useState } from 'react';

import './ExpensesFilter.css';

const ExpensesFilter = (props) => {
  const [selectedYear, setSelectedYear] = useState('');
  const yearChangeHandler = (event) => {
    const chosenYear = event.target.value;
    setSelectedYear(chosenYear);
    props.onYearChange(chosenYear); 
  };

  return (
    <div className='expenses-filter'>
      <div className='expenses-filter__control'>
        <label>Filter by year</label>
        <select onChange={yearChangeHandler}>
          <option value='2022'>2022</option>
          <option value='2021'>2021</option>
          <option value='2020'>2020</option>
          <option value='2019'>2019</option>
        </select>
      </div>
    </div>
  );
};

export default ExpensesFilter;

关于javascript - react : how to lift props up to parent component?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70617415/

相关文章:

javascript - 如何从 XMLHttpRequest 响应设置 HTML5 Canvas ImageData?

javascript - "No ' Access-Control-Allow-Origin POST请求成功后抛出' header is present on the requested resource"错误

javascript - 如何获取文档创建后添加的点击元素的ID?

javascript - 如何在 React 中设置类的样式

reactjs - 使用动态路由、next JS 和 useEffect 在 React 中获取数据

ruby-on-rails - 为什么我的 axios get 调用一遍又一遍地重复使用 React.useEffect 从 Rails 后端获取?

javascript - 在异步函数中同时 fetch(),并在 JavaScript 完成后返回

javascript - ReactJS - ref 不适用于 connect 和 redux-form

javascript - 在子组件中传递和调用的函数无权访问父状态值

reactjs - 使用 useSelector react-redux 钩子(Hook)重新选择 - 状态未定义