Вот некоторый код, который дает работающий пример, он должен работать, если вы откроете его в Firefox (у меня были проблемы с Chrome).
Когда вы нажимаете кнопку, число рядом с количеством слов увеличивается на значение, отображаемое на кнопке (1, 5 или 10).
Код, который производит желаемый вывод
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React tutorial</title>
<script src="https://unpkg.com/react@0.14.7/dist/react.js"></script>
<script src="https://unpkg.com/react-dom@0.14.7/dist/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
<link rel="stylesheet" type="text/css" href="lesson5challengestyling.css">
</head>
<body>
<div id="app"></div>
<script type="text/babel">
var CounterChallenge = React.createClass({
getInitialState: function() {
return {
count: 0
}
},
incrementCountByOne: function(value) {
this.setState({
count: this.state.count + 1
})
},
incrementCountByFive: function() {
this.setState({
count: this.state.count + 5
})
},
incrementCountByTen: function() {
this.setState({
count: this.state.count + 10
})
},
render: function() {
return (
<div className="container">
<h1>Count: {this.state.count}</h1>
<button className="btn blue-btn" onClick={this.incrementCountByOne}>Add 1</button>
<button className="btn green-btn" onClick={this.incrementCountByFive}>Add 5</button>
<button className="btn purple-btn" onClick={this.incrementCountByTen}>Add 10</button>
</div>
)
}
});
ReactDOM.render(
<CounterChallenge />,
document.getElementById('app')
);
</script>
</body>
</html>
----------------------------------------------- ------------------------
Я пытаюсь написать эту программу по-другому, создав класс кнопок, который имеет только одну функцию приращения (вместо increment1, increment5, increment10, как вы можете видеть в приведенном выше коде.)
Я бы хотел, чтобы приведенный ниже код работал точно так же, как приведенный выше.
Я инициализирую состояние переменной с именем count в базовом классе (Challenge), который реагирует на рендеринг в DOM. Внутри класса ChallengeButton я увеличиваю значение, хранящееся в count (на 1, 5 или 10, в зависимости от того, какое значение передается в переменной incCount)
Я не уверен, что с ним не так, все, что я действительно знаю, это то, что мой браузер отображает пустой белый экран. Когда я осматриваю элемент, я не получаю никакой полезной информации.
Моя программа (которую я хотел бы отладить)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React tutorial</title>
<script src="https://unpkg.com/react@0.14.7/dist/react.js"></script>
<script src="https://unpkg.com/react-dom@0.14.7/dist/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.2/browser.min.js"></script>
<link rel="stylesheet" type="text/css" href="lesson5challengestyling.css">
</head>
<body>
<div id="app"></div>
<script type="text/babel">
var ChallengeButton = React.createClass({
increment: function(){
this.setState({
count: this.state.count + this.props.incCount
})
},
render: function(){
return{
<button onClick={this.increment} incCount={this.props.incCount}></button>
}
}
});
var Challenge = React.createClass({
getInitialState: function(){
return{
count: 0
},
render: function(){
return {
<div>
<h1>Count: {this.state.count}</h1>
<ChallengeButton className="blue-btn" incCount='1'/>
<ChallengeButton className="red-btn" incCount='5' />
<ChallengeButton className="green-btn" incCount='10' />
</div>
}
}
});
ReactDOM.render(
<Challenge />,
document.getElementById('app')
);
</script>
</body>
</html>
----------------------------------------------- ------------------------
Сопровождающий файл CSS (не требует отладки)
body {
padding: 40px;
font-family: "helvetica neue", sans-serif;
}
.container {
width: 600px;
margin: auto;
color: black;
padding: 20px;
text-align: center;
}
.container h1 {
margin: 0;
padding: 20px;
font-size: 36px;
}
.container .btn {
border: 0;
padding: 15px;
margin: 10px;
width: 20%;
font-size: 15px;
outline: none;
border-radius: 3px;
color: #FFF;
font-weight: bold;
}
.btn.blue-btn {
background-color: #55acee;
box-shadow: 0px 5px 0px 0px #3C93D5;
}
.btn.blue-btn:hover {
background-color: #6FC6FF;
}
.btn.blue-btn {
background-color: #55acee;
box-shadow: 0px 5px 0px 0px #3C93D5;
}
.btn.blue-btn:hover {
background-color: #6FC6FF;
}
.btn.green-btn {
background-color: #2ecc71;
box-shadow: 0px 5px 0px 0px #15B358;
}
.btn.green-btn:hover {
background-color: #48E68B;
}
.btn.purple-btn {
background-color: #9b59b6;
box-shadow: 0px 5px 0px 0px #82409D;
}
.btn.purple-btn:hover {
background-color: #B573D0;
}