javascript - e.target.value 在 reactjs 中未定义
问题描述
li
当用户单击它时,我正在尝试记录标签的值。但是当我单击它时,它会以某种方式引发错误li
。
TypeError: Cannot read property 'target' of undefined
我认为我有关于将事件处理程序作为道具传递的问题。
这是父组件
const Category = props => {
const dispatch = useDispatch();
let [value, setValue] = useState("choose");
let clickHandler = e => {
console.log(e.target.value);
dispatch({
type: ADD_CATEGORY,
payload: value
});
};
return (
<div className="part">
<h3 className="cat">category</h3>
<Options
items={["one", "two", "three"]}
name="category"
clickHandler={clickHandler}
value={value}
/>
</div>
);
};
这是孩子
const Options = props => {
let [expanded, setExpanded] = useState(false);
let clickHandler = () => {
props.clickHandler();
setExpanded(false);
};
return (
<div className="options-container">
<button
className="option-head"
onClick={() => setExpanded(!expanded)}
value={props.value}
>
{props.value}
</button>
<ul className={expanded ? "options expanded" : "options not-expanded"}>
<li className="ul-title" onClick={() => setExpanded(false)}>
{props.name}
</li>
{props.items.map((item, index) => (
<li key={index} onClick={clickHandler} value={item}>
<p value={item}>{item}</p>
</li>
))}
</ul>
</div>
);
};
谢谢你!
解决方案
请更改您的代码如下
const Category = props => {
const dispatch = useDispatch();
let [value, setValue] = useState("choose");
let clickHandler = item => {
console.log(item);
dispatch({
type: ADD_CATEGORY,
payload: value
});
};
return (
<div className="part">
<h3 className="cat">category</h3>
<Options
items={["one", "two", "three"]}
name="category"
clickHandler={clickHandler}
value={value}
/>
</div>
);
};
const Options = props => {
let [expanded, setExpanded] = useState(false);
let clickHandler = (item) => {
props.clickHandler(item);
setExpanded(false);
};
return (
<div className="options-container">
<button
className="option-head"
onClick={() => setExpanded(!expanded)}
value={props.value}
>
{props.value}
</button>
<ul className={expanded ? "options expanded" : "options not-expanded"}>
<li className="ul-title" onClick={() => setExpanded(false)}>
{props.name}
</li>
{props.items.map((item, index) => (
<li key={index} onClick={() => clickHandler(item)} value={item}>
<p value={item}>{item}</p>
</li>
))}
</ul>
</div>
);
};
由于您没有在下面的代码中传递事件,因此它没有被传递给 Category 组件,因为它e
是未定义的。
推荐阅读
- excel - PPT中的链接Excel图表(更新问题)
- javascript - 我想在 Nuxt.js 的整个视图中显示一个半透明背景作为组件公开
- c++ - (C++) docker 容器中的语言服务器
- c - 如何在 Win32 中以编程方式关闭对话框
- javascript - 为什么使用 HttpParams 对象在角度请求中使用查询参数?
- android - 有什么办法可以禁止在模拟器上截屏
- cakephp-3.0 - 个人资料图片未自动更新
- github - 如何保存 Jupyter html 输出的图像快照?
- android-studio - Android 项目同步失败
- javascript - react-swipable-views 使用时显示错误