我需要通过bookLeacture
函数从可用性课程
到Lecture Item
(在按钮onClark
内)。但是我想我只能在LectureItem
中定义变量,但不能定义为函数。你能解释一下我该如何称呼和定义它吗?
const LectureItem = props => {
let l = props.lecture;
// let bookLeacture=props.bookLeacture
return (
<>
<Container>
<Row>
<Col>
<Alert variant="primary">
<Row>
{l.booked === false && (
<Col>
<Button
onClick={this.bookLeacture(l.lectureId)}
variant="success"
block
>
Book Now
</Button>
</Col>
)}
</Row>
</Alert>
</Col>
</Row>
</Container>
</>
);
};
class AvailableCourses extends React.Component {
bookLeacture = id => {
API.bookLeacture(id)
.then(res => {
console.log(res);
this.setState({ lectures: res, loading: null, serverErr: null });
})
.catch(err => {
this.setState({ serverErr: true, loading: null });
});
};
constructor(props) {
super(props);
this.state = { lectures: [] };
}
render() {
return (
<>
<Container fluid>
<Row className="justify-content-md-center below-nav">
<h3>Available Courses: </h3>
</Row>
{this.state.lectures.map(e => {
return <LectureItem lecture={e} bookLeacture={this.bookLeacture} />;
})}
</Container>
</>
);
}
}
export default AvailableCourses;
这里有一个函数组件,它没有经典的参数。这意味着,this
在这里无效。所以你需要做的就是,改变以下内容:
onClick={this.bookLeacture(l.lectureId)}
对此,加上上面也不是一个正确的方法,它立即被执行:
onClick={() => bookLeacture(l.lectureId)}
此外,您不需要片段
最终我会做这样的事情:
const LectureItem = ({ lecture, bookLeacture }) => {
return (
<Container>
<Row>
<Col>
<Alert variant="primary">
<Row>
{lecture.booked === false && (
<Col>
<Button
onClick={() => bookLeacture(lecture.lectureId)}
variant="success"
block
>
Book Now
</Button>
</Col>
)}
</Row>
</Alert>
</Col>
</Row>
</Container>
);
};
class AvailableCourses extends React.Component {
state = { lectures: [] };
bookLeacture = id => {
API.bookLeacture(id)
.then(res => {
console.log(res);
this.setState({ lectures: res, loading: null, serverErr: null });
})
.catch(err => {
this.setState({ serverErr: true, loading: null });
});
};
render() {
return (
<Container fluid>
<Row className="justify-content-md-center below-nav">
<h3>Available Courses:</h3>
</Row>
{this.state.lectures.map(e => {
return <LectureItem lecture={e} bookLeacture={this.bookLeacture} />;
})}
</Container>
);
}
}
export default AvailableCourses;
我还会做更多的事情:
使用MyAlert
组件使警报看起来更整洁。
- 添加一个
key
prop,使其工作正常。 - 删除不必要的片段
完全优化源:
const MyAlert = ({ children }) => (
<Container>
<Row>
<Col>
<Alert variant="primary">
<Row>{children}</Row>
</Alert>
</Col>
</Row>
</Container>
);
const LectureItem = ({ lecture, bookLeacture }) => {
return (
<MyAlert>
{lecture.booked === false && (
<Col>
<Button
onClick={() => bookLeacture(lecture.lectureId)}
variant="success"
block
>
Book Now
</Button>
</Col>
)}
</MyAlert>
);
};
class AvailableCourses extends React.Component {
state = { lectures: [] };
bookLeacture = id => {
API.bookLeacture(id)
.then(res => {
console.log(res);
this.setState({ lectures: res, loading: null, serverErr: null });
})
.catch(err => {
this.setState({ serverErr: true, loading: null });
});
};
render() {
return (
<Container fluid>
<Row className="justify-content-md-center below-nav">
<h3>Available Courses:</h3>
</Row>
{this.state.lectures.map((e, key) => {
return (
<LectureItem
lecture={e}
bookLeacture={this.bookLeacture}
key={key}
/>
);
})}
</Container>
);
}
}
export default AvailableCourses;
问题内容: 我想在警报窗口中显示该人的电子邮件。但是,我不知道如何将电子邮件作为参数传递给displayAlert方法。此外,它也不会让我使用。因此,我必须将displayAlert方法分配给变量,并在onClick中使用它。我不知道为什么它不能让我直接调用它。 问题答案: ES6方式 : 使用箭头功能 匿名函数被调用并执行 ES5方式: 您可以使用并在其中传递参数来执行此操作。 您还应该传递或使
我的Navbar组件有2个子组件。每个组件都有自己的状态。在其组成部分内工作正常的国家。如何更新这两个状态从假到真的同时,当两个功能onclick将被执行? 主组件导航栏 列表菜单组件 汉堡包成分
我想传递th标签的id
问题内容: 我想阅读onClick事件值属性。但是当我单击它时,在控制台上会看到类似以下的内容: 我的代码正常工作。运行时,我可以在onClick事件中看到但无法获取它。 我的代码: 如何在React js中将值传递给事件? 问题答案: 简单的方法 使用箭头功能: 这将创建一个新的函数,以正确的参数进行调用。 更好的方法 将其提取到子组件中。在render调用中使用箭头函数的问题是,每次都会创建一
本文向大家介绍js的函数的按值传递参数(实例讲解),包括了js的函数的按值传递参数(实例讲解)的使用技巧和注意事项,需要的朋友参考一下 js的函数传参的方式是按值传递,正常情况下,改变函数参数的值,并不会对函数外部的变量造成影响。例如: 这是因为js的函数在接收参数时,会生成一个副本变量,该副本变量等于参数的值,可以分析js这样运行的: 但是当函数的参数传递的是一个对象呢? 发现函数内部居然改变了