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
bind, though, you don't really want to do it in therendermethod.)