这是我想让工作的代码。当我点击按钮时,一切都保持不变。Console.log
确实会改变。出了什么问题?谢谢
import React, {useState} from 'react';
import ExpenseDate from './ExpenseDate';
import Card from '../UI/Card';
import './ExpenseItem.css';
function ExpenseItem(props) {
const [title, setTitle]= useState(props.title);
const clickHandler=()=>{
setTitle('Updated!');
console.log(title);
};
return (
<Card className='expense-item'>
<ExpenseDate date={props.date}></ExpenseDate>
<div className='expense-item__description'>
<h2>{props.title}</h2>
<div className='expense-item__price'>${props.amount}</div>
</div>
<button onClick={clickHandler}>Change title</button>
</Card>
);
}
export default ExpenseItem;
5条答案
按热度按时间f1tvaqid1#
你在HTML中传递了
props.title
而不是title
。即使你的状态值正在更新,你也没有使用这个值。相反,你使用的是组件props传递的初始值。vwhgwdsa2#
虽然已经有了答案,但我想从更广泛的Angular ,在这里让事情更清楚一点。
假设你有一个
ComponentA
,它通过props为ComponentB
提供了一个标题:在这里,您实际上是告诉
ComponentB
从props.title
获取其初始状态,但在组件的生命周期中,您正在更改title
,但是在h1
标记中,您仍然呈现props.title
,而不是title
,这是您状态中的标题。要解决这个问题,你可以做两件事:在
h1
中渲染title
而不是props.title
,或者将状态提升到ComponentA
,以便更清晰和严格地控制UI渲染的内容:在大多数情况下,减少变量的数量是一个很好的做法,只要它有助于简化代码,并且不会干扰应用程序中的其他内容。
stszievb3#
在你的代码中修改这个。正如前面指出的,你使用了错误的变量来打印数据。
<h2>{props.title}</h2>
至<h2>{title}</h2>
mbjcgjjk4#
在react中,state和props之间的主要区别在于state是可变的,而props不是。所以如果你想更新值,你必须使用本地state而不是props。
efzxgjgh5#
看起来你正在渲染props而不是状态。而不是
<h2>{props.title}</h2>
,请使用<h2>{title}</h2>
重试