我使用的是“反应-反应-模式”的npm方案。
如果你克隆并运行“npm启动”
您将看到这样的虚拟UI
header
click me objId: 43
click me objId: 42
click me objId: 41当我单击43、42、41时,console.log总是输出41。我希望它能单独输出43,42,41。
这和onclick有关吗?它需要用onclick结束吗?
这是主要代码
import React, { Component } from 'react';
//import logo from './logo.svg';
//import './App.css';
import Modal from 'react-responsive-modal';
class App extends Component {
constructor(props) {
super(props);
this.state = {
isModelOpen: false
}
}
mydata() {
let arr = [
{
id: 43,
date: "Nov 26, 2018",
},
{
id: 42,
date: "Nov 26, 2018",
},
{
id: 41,
date: "Nov 26, 2018",
},
];
return arr;
}
modalNoButton() {
this.setState({ isModelOpen: false });
}
modalYesButton(objId, date) {
// test
console.log('-- modalYesButton --');
console.log(objId);
console.log(date);
this.setState({isModelOpen: false});
}
onOpenModal() {
this.setState({ isModelOpen: true });
}
onCloseModal() {
this.setState({ isModelOpen: false });
}
createActionHtml(objId, date) {
// test
//console.log('-- createActionHtml --');
//console.log(objId);
let {isModelOpen} = this.state;
let pointerStyle = {
cursor: 'pointer'
};
let bigMarginStyle = {
marginTop: '30px'
}
return (
<div>
<div className='myPointer'>
<a onClick={this.onOpenModal.bind(this)} style={pointerStyle}>click me objId: {objId}</a>
</div>
<Modal open={isModelOpen} onClose={this.onCloseModal.bind(this)}>
<div style={bigMarginStyle}>
popup
</div>
<div className='row'>
<div className='col xs-6'>
<button
onClick={() => {this.modalYesButton(objId, date)}}
>
Yes
</button>
</div>
<div className='col xs-6'>
<button
onClick={this.modalNoButton.bind(this)}
>
No
</button>
</div>
</div>
</Modal>
</div>
);
}
myhistory() {
let arr = this.mydata();
let html = arr.slice(0, 3).map((obj, index) => {
let objId = obj.id;
let date = obj.date;
let actionHtml = this.createActionHtml(objId, date);
return (
<div key={index}>
{actionHtml}
</div>
);
});
return html;
}
render() {
return (
<div className="App">
<header className="App-header">
header
</header>
{this.myhistory()}
</div>
);
}
}
export default App;发布于 2018-11-26 01:46:57
问题是,您实际上是在另一个上面呈现三个modal,每个项目一个,最后一个id 41的模态位于顶部。状态isOpenModal是一个单一的布尔值,它确定是否所有三个modals都呈现,但是您确实想要跟踪这三个模型中哪个是打开的,所以我将用openModalId替换isOpenModal。
下面是一个工作的代码框:https://codesandbox.io/s/j388zzyow3
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
import Modal from "react-responsive-modal";
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
openModalId: null
};
}
mydata() {
let arr = [
{
id: 43,
date: "Nov 26, 2018"
},
{
id: 42,
date: "Nov 26, 2018"
},
{
id: 41,
date: "Nov 26, 2018"
}
];
return arr;
}
modalNoButton() {
this.setState({ openModalId: null });
}
modalYesButton(objId, date) {
// test
console.log("-- modalYesButton --", objId);
this.setState({ openModalId: null });
}
onOpenModal(objId) {
this.setState({ openModalId: objId });
}
onCloseModal() {
this.setState({ openModalId: null });
}
createActionHtml(objId, date) {
// test
// console.log('-- createActionHtml --', objId);
let { isModelOpen } = this.state;
let pointerStyle = {
cursor: "pointer"
};
let bigMarginStyle = {
marginTop: "30px"
};
return (
<div>
<div className="myPointer">
<a onClick={() => this.onOpenModal(objId)} style={pointerStyle}>
click me objId: {objId}
</a>
</div>
<Modal
open={this.state.openModalId === objId}
onClose={this.onCloseModal.bind(this)}
>
<div style={bigMarginStyle}>popup</div>
<div className="row">
<div className="col xs-6">
<button
onClick={() => {
this.modalYesButton(objId, date);
}}
>
Yes
</button>
</div>
<div className="col xs-6">
<button onClick={this.modalNoButton.bind(this)}>No</button>
</div>
</div>
</Modal>
</div>
);
}
myhistory() {
let arr = this.mydata();
let html = arr.slice(0, 3).map((obj, index) => {
let objId = obj.id;
let date = obj.date;
let actionHtml = this.createActionHtml(objId, date);
return <div key={index}>{actionHtml}</div>;
});
return html;
}
render() {
return (
<div className="App">
<header className="App-header">header</header>
{this.myhistory()}
</div>
);
}
}
export default App;
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);https://stackoverflow.com/questions/53473663
复制相似问题