I have simple hello world code:
import React from 'react';
class ShoppingList extends React.Component {
getComponent(event) {
console.log('li item clicked!');
event.currentTarget.style.backgroundColor = '#ccc';
}
render() {
return (
<div className="shopping-list">
<h1>This is props name: {this.props.name}</h1>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<div>
<ul>
<li onClick={this.getComponent.bind(this)}>Component 1</li>
</ul>
</div>
</div>
);
}
}
module.exports = ShoppingList;
When I click on <li>Component 1</li>
nothing happens.
Why? Page is rendered successfully. No errors,
everything
is ok, but handler not working.
FULL EXAMPLE
:
Node server: app.js
var express = require('express');
var app = express();
var routes = require('./routes/index')
app.use('/', routes);
app.set('port', process.env.PORT || 9080);
app.use('/public', express.static(__dirname + '/public/'));
app.set('views', __dirname + '/views');
app.set('view engine', 'jsx');
app.engine('jsx', require('express-react-views').createEngine());
var server = app.listen(app.get('port'), function () {
console.log(__dirname + '/public/');
console.log('STARTED');
});
route: index.js:
var express = require('express');
var router = express.Router();
router.get('/', function (req, res) {
res.render('index', {name:"AHOJ"});
});
module.exports = router;
index.jsx:
import React from 'react';
var ShoppingList = require('./components/ShoppingList');
class IndexComponent extends React.Component {
constructor(props) {
super(props);
this.getComponent = this.getComponent.bind(this);
}
getComponent(event) {
console.log('li item clicked!');
event.currentTarget.style.backgroundColor = '#ccc';
}
render() {
return (
<DefaultLayout name={this.props.name}>
<div>
<ul>
<li onClick={this.getComponent}>Component 1</li>
</ul>
</div>
</DefaultLayout>
)
}
};
module.exports = IndexComponent;
master.jsx:
var React = require('react');
class MasterLayout extends React.Component {
render() {
return (
<html lang="eng">
<head>
<meta charset="utf-8" />
<title>{this.props.name}</title>
<meta name="description" content="The HTML5 Herald" />
<meta name="author" content="SitePoint" />
<link rel="stylesheet" type="text/css" href="/public/css/main.css" />
</head>
<body>
{this.props.children}
</body>
</html>
)
}
};
module.exports = MasterLayout;
I hope, this code is clear for you, its hello world project. In full example is class ShoppingList
: IndexComponent
.
I read some tutorials, and I thinks, my code is correct, page is rendered successfully. No errors,
everything
is ok, but handler not working.
<li>
have not data-reactid