<html>
<head>
<script src="https://fb.me/react-15.1.0.js"></script>
<script src="https://fb.me/react-dom-15.1.0.js"></script>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
//영웅리스트 렌더
class PersonInfo extends React.Component {
render() {
return (
<option value= {this.props.hero.id}>
{this.props.hero.name}
</option>
);
}
}
class Setting extends React.Component {
constructor(props) {
super(props);
this.state = {
pickupTarget:"0",
useRuby:0,
getList :[],
getHistoryList :[],
heroList: [
{name:"네스트라의 사도 [세인]",per:0.008,grade:5},
{name:"네스트라의 사도 [밍]",per:0.008,grade:5},
{name:"엘레나의검 [발데르]",per:0.008,grade:5},
{name:"엘레나의검 [코제트]",per:0.008,grade:5},
{name:"빛의 기사 [루디]",per:0.008,grade:5},
{name:"포디나의 여제 [아일린]",per:0.0471428571428571,grade:4},
{name:"절대 수호자 [루디]",per:0.0471428571428571,grade:4},
{name:"파멸의기사 [델론즈]",per:0.0471428571428571,grade:4},
{name:"불멸의 화신 [레이첼]",per:0.0471428571428571,grade:4},
{name:"차원의 인도자 [연희]",per:0.0471428571428571,grade:4},
{name:"하얀이리 [에반]",per:0.0471428571428571,grade:4},
{name:"혹한의 폭군 [스파이크]",per:0.0471428571428571,grade:4},
{name:"불멸의 여제 [아일린]",per:0.0471428571428571,grade:4},
{name:"빛의 성녀 [카린]",per:0.0471428571428571,grade:4},
{name:"홍염의 화살 [클레어]",per:0.0471428571428571,grade:4},
{name:"핏빛 장미 [미스벨벳]",per:0.0471428571428571,grade:4},
{name:"광기의 연구자 [멜키르]",per:0.0471428571428571,grade:4},
{name:"여명의 뇌룡 [렌]",per:0.0471428571428571,grade:4},
{name:"악몽의 추적자 [크리스]",per:0.0471428571428571,grade:4},
{name:"네스트라의 사도 [루키]",per:0.3333,grade:3},
{name:"네스트라의 사도 [챙첸]",per:0.3333,grade:3},
{name:"네스트라의 사도 [멜리사]",per:0.3334,grade:3},
{name:"엘레나의 검 [렌]",per:0.3333,grade:3},
{name:"엘레나의 검 [앙리]",per:0.3333,grade:3},
{name:"엘레나의 검 [케이드]",per:0.3334,grade:3},
{name:"흑화마검 [세인]",per:0.5214,grade:2},
{name:"마도 오토마타 [코제트]",per:0.5215,grade:2},
{name:"최후의 기사 [발데르]",per:0.5215,grade:2},
{name:"은둔자 [루디]",per:0.5215,grade:2},
{name:"영원의 뇌제 [아일린]",per:0.5215,grade:2},
{name:"새로운자아 [네오델론즈]",per:0.5214,grade:2},
{name:"천상의 목소리 [세레나]",per:0.5214,grade:2},
{name:"모험가 [샤이]",per:0.5214,grade:2},
{name:"서큐버스악동 [밍]",per:0.5214,grade:2},
{name:"혹한의 수호자 [윈디고]",per:0.5214,grade:2},
{name:"혁명의 수인 [테온]",per:0.5214,grade:2},
{name:"특급 해결사 [캐스퍼]",per:0.5214,grade:2},
{name:"영혼의 인도자 [주주]",per:0.5214,grade:2},
{name:"야성의 포효 [이오타]",per:0.5214,grade:2},
{name:"로얄블러드 [아델]",per:3.75,grade:1},
{name:"순백의 순찰자 [클레어]",per:3.75,grade:1},
{name:"검은장미 [미스밸벳]",per:3.75,grade:1},
{name:"악마사냥꾼 [스콧]",per:3.75,grade:1},
{name:"강철의 요새 [트리스탄]",per:3.75,grade:1},
{name:"고통의 탐식자 [앙리]",per:3.75,grade:1},
{name:"연금술사 [이안]",per:3.75,grade:1},
{name:"마도공학자 [길라한]",per:3.75,grade:1},
{name:"파동의 용아 [챙첸]",per:12,grade:0},
{name:"정예전사 [케이드]",per:12,grade:0},
{name:"빛의 순례자 [멜리사]",per:12,grade:0},
{name:"승부사 [루키]",per:12,grade:0},
{name:"여명의 희망 [렌]",per:12,grade:0}
]
};
["_oneGetClick","_tenGetClick","change",
"pickUpSetting","setHeroId","getHero","_resetClick"].forEach(name => {
this[name] = this[name].bind(this);
});
}
componentDidMount(){
$.each(this.state.heroList, function(index, item){
item.id = index;
});
this.setState({
heroList:this.state.heroList
});
}
setHeroId(e){
console.log("tttttt2222ttt");
$.each(this.state.heroList, function(index, item){
item.id = index;
});
this.setState({
heroList:this.state.heroList
});
}
render() {
/* const setHero2 = data => {
return data.map((set2, i) => {
return (<PersonInfo hero={set2} key={i}/>);
});
};*/
const setHero = this.state.heroList.map(
(hero,i)=>(<option value= {hero.id} key={i}>{hero.name}</option>)
);
const getHeroLi = this.state.getList.map(
(hero,i)=>(<li key={i} className={"grade"+hero.grade}>{hero.name}</li>)
);
return (
<div>
<select onChange={this.change} >
{setHero}
</select>
<select value={this.state.pickupTarget} onChange={this.pickUpSetting} >
<option value="0">일반뽑기</option>
<option value="18">크리스확률업</option>
<option value="13">카린확률업</option>
</select>
<button onClick={this._oneGetClick}>1회뽑기</button>
<button onClick={this._tenGetClick}>10회뽑기</button>
<button onClick={this._resetClick}>초기화</button>
<div>
뽑힌 영웅
<div>소모된루비 {this.state.useRuby}</div>
<ul>
{getHeroLi}
</ul>
</div>
</div>
);
}
pickUpSetting(e){
this.setState({pickupTarget: e.target.value});
// 왜 바로 적용 안됨?? =>(setState가 비동기로 적용되기 때문이다.
// 바로 써야 될땐 preveState를 이용하자)
console.log("no:"+this.state.pickupTarget);
let targetId = e.target.value
$.each(this.state.heroList, function(index, item){
if(targetId==0&&item.grade==4){
item.per = 0.0471428571428571;
}else{
if(item.grade==4){
item.per = 0.02;
}
if(item.id==targetId){
item.per = 0.4;
}
}
});
this.setState({
heroList:this.state.heroList
});
}
change(e){
}
_oneGetClick(e) {
let result = this.getHero();
this.setState({
getList:[result],
useRuby:this.state.useRuby +120
})
console.log(result);
}
_tenGetClick(e) {
let tenResult = [];
for(let cnt = 0; cnt < 10; cnt++){
let result = this.getHero();
tenResult.push(result);
}
this.setState({
getList:tenResult,
useRuby:this.state.useRuby +1100
});
}
_resetClick(e){
this.setState({
getList:[],
useRuby:0
});
}
getHero(){
// console.log("뽑기");
val = Math.round(Math.random()*1000000);
val = val/10000
//console.log("뽑기값:"+val)
var heroCard;
var sum = 0;
$.each(this.state.heroList, function(index, item){
sum=+ (sum + item.per).toFixed(12);
//console.log("sum값"+sum)
if(sum >= val){
heroCard = item;
//console.log(item);
return false;
}
});
// heroHistoryArr.push(heroCard);
return heroCard;
}
}
class App extends React.Component {
render() {
return(
<div>
<Setting/>
</div>
);
}
}
ReactDOM.render(<App/>, document.getElementById("app"));
Output
This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account
Dismiss xKeyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |