【发布时间】:2021-01-10 07:16:32
【问题描述】:
我在下面有一些代码,我在父组件中将状态声明为空字符串。
我要做的是创建一个处理函数,它将获取按钮 onClick 的 innerText 并使用该值更新大小状态。
import { Child } from './Child';
import React, { useState } from 'react';
export default function Parent() {
const [state, setState] = useState({
name: 'bob',
size: '',
});
const handleSize = (e) => {
setState((state) => ({
...state,
size: e.target.innerText,
}));
};
return (
<Child
size={state.size}
onClick={handleSize}
/>
);
}
这是按钮的子组件,按钮的 innerText 为 500。-我只是想将大小的状态设置为按钮元素内的任何值,但这似乎不起作用。
EDIT1:更新代码以将大小发送给孩子。
EDIT2:当前代码抛出 TYPE ERROR: 'Cannot read property 'innerText' of null' 这是因为获取 JSX 元素的 innerText 与 HTML 元素不同吗?
EDIT3:我在下面回答了我自己的问题。我的处理函数需要调整。
export const Child = ({
size,
onClick,
}) => {
return (
<div>
<button onClick={onClick}>500</button>
</div>
);
};
【问题讨论】:
-
这看起来很合理,但由于
size没有在任何地方使用,您不会看到状态更改的影响 -
啊,看看我更新的代码。我现在正在向下传递大小,但是,我应该在哪里声明它以从按钮元素中获取静态值?按钮中的 value={size} 可能吗?
-
您不一定需要将其传递下去,您只需要在 somewhere 使用它,这样您就可以直观地看到状态的变化。即使是
console.log(size)也应该这样做——你想用那个属性做什么? -
我将有几个不同大小值的按钮。单击后,更新状态将更新另一个元素的大小(宽度)。
-
那你需要在某处实现那个宽度,才能看到状态改变的效果,否则它实际上是不可见的
标签: reactjs event-handling react-hooks state