我是StackOverflow的新手,所以请原谅我对问题的错误措辞。我目前正在学习React,作为一个小项目,我正在创建一个课程搜索应用程序,它将根据用户从JSON文件输入的内容筛选课程并显示它们。我已经为每一个卡片组件添加了模态,这些组件应该在点击卡片内的一个按钮时打开。我面临的问题是,当我点击按钮时,它只打开第一个点击的模态,其他的都不打开。
代码如下:
import MyModal from '../Modal/Modal'
import courseList from "./courses.json";
class App extends Component {
state = {
search: "",
modal: false,
};
selectModal = (id) => {
this.setState({
modal: {
[id]: !this.state.modal
}
})
}
rendercourse = course => {
var dep = course.dep;
return (
<div className="col-md-3" style={{ marginTop: "20px" }}>
<Card className="card">
<CardBody className={dep}>
<CardTitle title={course.id}>
{course.code}
</CardTitle>
<CardText className="title">{course.name}</CardText>
<p className="ic">{course.ic}</p>
Units: {course.unit}<br />
<button onClick= {
this.selectModal.bind(this, course.code)}>More Info</button>
</CardBody>
<MyModal
displayModal={this.state.modal[course.code]}
coursename={course.name}
coursecode={course.code}
courseic={course.ic}
coursedep={course.dep}
courseunit={course.unit}
closeModal={this.selectModal} />
</Card>
</div>
);
};
onchange = e => {
this.setState({ search: e.target.value });
};
render() {
const { search } = this.state;
const filteredcourses = courseList.filter(course => {
return course.name.toLowerCase().indexOf(search.toLowerCase()) !== -1;
});
return (
<div className="flyout">
<main style={{ marginTop: "4rem" }}>
<div className="container">
<div className="row">
<div className="col-12">
<center>
<h3>
Search for a course
</h3>
</center>
</div>
<div className="col">
<Input
label="Enter the name of the course"
icon="search" className="in"
onChange={this.onchange}
/>
</div>
<div className="col" />
</div>
<div className="row">
{filteredcourses.map(course => {
return this.rendercourse(course);
})}
</div>
</div>
</main>
</div>
);
}
}
export default App;
下面是模态成分:
const MyModal = props => {
function displayInfo () {
return (
<div>
<div>{props.coursename}</div>
<div>{props.courseic}</div>
<div>{props.courseunit}</div>
<div>{props.coursedep}</div>
<div>{props.coursecode}</div>
</div>
);
}
function closeModal (e) {
e.stopPropagation()
props.closeModal()
}
let modal = (
<div
className="modal"
onClick={ closeModal }>
<div className="modal-content"
onClick={ e => e.stopPropagation() }>
<span
className="close"
onClick={ closeModal }>×
</span>
<div className="modal-flex">
{displayInfo()}
</div>
</div>
</div>
)
return ( props.displayModal ? modal : null);
}
export default MyModal;
我想要卡特定的模式打开每当按钮被点击。
您的selectModal函数不会翻转每个模态的状态,而只翻转第一个模态的状态。如果在状态中定义了任何一个模态(无论是第一个模态还是任何其他模态),this.state.modal将计算为true。(至少有部分内容的对象为真)
要允许同时打开所有的情态,只需在modal state对象中翻转modal元素的值。
this.state.modal[id]
默认情况下未定义,其计算结果为布尔值false。
selectModal = (id) => {
this.setState({
modal: {
[id]: !this.state.modal[id]
}
})
}
如果您宁愿一次只打开一个模态,那么您应该简单地将您的模态的id存储在状态中,而不是跟踪其中的所有模态:
selectModal = (id) => {
this.setState({
modal: id
})
}
要关闭一个模态,请更改closeModal prop以传递undefined/false而不是模态ID,并更改您的模态显示prop,这样它将执行检查您的模态状态和coursecode是否匹配:
this.state.modal === course.code
问题内容: 接下来的代码使用Modal react组件: 我正在尝试使用以下方式调用它: 和 我的意思是,单击此按钮后,没有任何显示。还有另一种方法可以调用该模式吗?我从以下位置导入模式: 从“反应-响应-模态”导入模态 问题答案: 您试图仅在单击按钮后才渲染模态,这对于非反应性环境是很自然的,但在反应中它以不同的方式起作用。在最简单的解决方案中,应始终呈现,当用户单击按钮时,将modal 属性更
打开商品详情 Tida.detail(42792477524);//参数为商品ID
我有一个模式,当我点击一个按钮时,它是打开的。现在我想在一个javascript函数中打开模态。下面是工作模式: 我想在javascript函数中打开相同的模式。为了模拟这个函数,我创建了另一个触发函数的按钮: 下面是我的openModal函数: 当我点击“点击执行JS”按钮时,模式没有打开。这是柱塞
剧情脚本 如基础教程里所说,吉里吉里一共有两种类型的脚本文件,KS和TJS。 其中以.ks作为扩展名的文件也被称为剧情脚本。通常放在scenario文件夹下。 那么,什么样的东西被称为“剧情”呢? 答案是,对话,背景、人物的显示,音乐、音效的播放,特效,选择支等等,都是剧情的一部分。 而通过往剧情脚本里添加这些,就能完成一个电子小说了。 游戏从这里开始 在THE NVL Maker游戏里,当点下标
问题内容: 我希望能够实例化一个Typescript类,在运行时可以获取该类和构造函数的详细信息。我想编写的函数将包含类名和构造函数参数。 问题答案: 您可以尝试: 编辑 此版本可在TypeScript操场上使用,例如:
是否有任何缓存或某种设置在jasper或类似的东西?