- 64
- 0
我想循环的给一个组建添加事件,但是为什么不行?
class Lesson extends Component {
/* TODO */
constructor(){
super()
}
alertInfo(lesson,index){
console.log(index+"-"+lesson.title)
}
render(){
const lesson=this.props.lesson
const index=this.props.index
console.log(lesson)
return(
<div >
<h1 onClick={this.alertInfo.bind(this,lesson,index)}>{ lesson.title }</h1>
<p>{ lesson.description }</p>
</div>
)
}
}
class LessonsList extends Component {
/* TODO */
constructor(){
super()
}
info(){
console.log(666)
}
render(){
const lessons = this.props.lessons
console.log(lessons)
return (
<div>
{
lessons.map((item,index)=>
<Lesson lesson={item} key={index} index={index} onClick={()=>{console.log(666)}}/>
)
}
</div>
)
}
} - 共 0 条
- 全部回答
-
放开那女孩儿 普通会员 1楼
在React中,父组件通过子组件的
useEffect钩子和addEventListener方法绑定事件时,如果子组件的状态改变或生命周期事件触发,父组件的绑定事件可能会失效。这是因为React的生命周期方法会在子组件的状态发生变化时自动调用父组件的回调函数,这些回调函数在不添加useEffect的情况下会忽略子组件的状态改变。以下是一个例子,展示在React父组件中绑定事件失效的情况:
```jsx import React, { useState } from 'react';
function ParentComponent() { const [data, setData] = useState([]);
function handleDataChange(data) { setData(data); // 当父组件重新渲染时,数据状态可能会更新,导致父组件的事件绑定失效 // 如果父组件希望保持数据状态不变,需要在
useEffect中处理这种情况 // 例如,可以在useEffect中添加一个unsubscribe操作符,当数据状态发生变化时,通知父组件不再需要回调函数 setTimeout(() => { setData([]); }, 1000); }return (
); }-
{data.map((item, index) => (
- {item} ))}
export default ParentComponent; ```
在这个例子中,
ParentComponent组件在子组件的状态改变时触发了handleDataChange函数。然而,当子组件重新渲染时(在setTimeout函数中),handleDataChange函数可能已经被useEffect回调函数覆盖,导致数据状态不再与父组件绑定。为了避免这种情况,可以在
useEffect中添加一个unsubscribe操作符,如下所示:```jsx import React, { useState } from 'react';
function ParentComponent() { const [data, setData] = useState([]);
function handleDataChange(data) { setData(data); // 当父组件重新渲染时,数据状态可能会更新,导致父组件的事件绑定失效 // 如果父组件希望保持数据状态不变,需要在
useEffect中处理这种情况 // 例如,可以在useEffect中添加一个unsubscribe操作符,当数据状态发生变化时,通知父组件不再需要回调函数 setTimeout(() => { setData([]); }, 1000); }useEffect(() => { // 在数据发生变化时,调用子组件的回调函数 const unsubscribe = setData => { // 在这里添加一个全局变量,当数据发生变化时,更新全局变量 // 然后在
useEffect中通知子组件不再需要回调函数 // 这样,当子组件重新渲染时,数据状态仍然会与父组件绑定 const unsubscribeGlobal = globalVariable; // 这里假设全局变量名为globalVariable,可以改变其名称以适应实际情况 unsubscribeGlobal(data); };// 保存子组件的回调函数作为全局变量,当数据发生变化时,更新全局变量 // 然后在`useEffect`中通知子组件不再需要回调函数 // 这样,当子组件重新渲染时,数据状态仍然会与父组件绑定 return () => { unsubscribe(globalVariable); };}, [data]);
return (
); }-
{data.map((item, index) => (
- {item} ))}
export default ParentComponent; ```
在这个例子中,
ParentComponent组件在子组件的状态变化时触发了handleDataChange函数,但子组件的状态变化不会触发useEffect回调函数,因此数据状态与父组件绑定。在useEffect中添加了全局变量unsubscribeGlobal,当子组件的状态发生变化时,更新unsubscribeGlobal,然后通知子组件不再需要回调函数,这样子组件在重新渲染时,数据状态仍然与父组件绑定。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
