为什么 onClick 在组件呈现时触发而不是在单击时触发?
Why is onClick triggering on render of component instead of when clicked?
我有这个按钮 console.log 作为测试,它会在我刷新页面时触发,而不是在我单击导航按钮时触发。如果您需要更多,请告诉我您是否可以看到此代码的问题。
import React from 'react';
import SideNav from "react-sidenav";
var TeamActions = require('../actions/TeamActions');
export default class Nav extends React.Component {
pushName(name) {
TeamActions.setTeamName(name);
}
render() {
return(
<SideNav.Menu
path="#"
itemHeight="32px"
styles={{margin: "0"}}
>
<SideNav.MenuItem
itemKey="truck"
>
//this is where I'm using onClick
<SideNav.ILeftItem
className="fa fa-truck"
onClick={console.log("hello")}
>
Boston Celtics
</SideNav.ILeftItem>
</SideNav.MenuItem>
那是因为您实际上是在 onClick 处理程序中调用 console.log
函数,而不是仅仅指向它的引用。 JSX 编译为纯 JS,因此 {}
括号之间的任何内容都将被评估。您只需指向您的 onClick 中的函数引用,而不是调用它。
使用 ES6 类 时需要绑定到当前的 this
,这有点复杂,因为它不像旧样式那样自动绑定 React.createClass
语法,但这里有一个简单的例子,
class MyComponent {
onLinkClicked () {
console.log('Clicked!')
}
render () {
return (
<a onClick={this.onLinkClicked.bind(this)}>Click me</a>
);
}
}
我有这个按钮 console.log 作为测试,它会在我刷新页面时触发,而不是在我单击导航按钮时触发。如果您需要更多,请告诉我您是否可以看到此代码的问题。
import React from 'react';
import SideNav from "react-sidenav";
var TeamActions = require('../actions/TeamActions');
export default class Nav extends React.Component {
pushName(name) {
TeamActions.setTeamName(name);
}
render() {
return(
<SideNav.Menu
path="#"
itemHeight="32px"
styles={{margin: "0"}}
>
<SideNav.MenuItem
itemKey="truck"
>
//this is where I'm using onClick
<SideNav.ILeftItem
className="fa fa-truck"
onClick={console.log("hello")}
>
Boston Celtics
</SideNav.ILeftItem>
</SideNav.MenuItem>
那是因为您实际上是在 onClick 处理程序中调用 console.log
函数,而不是仅仅指向它的引用。 JSX 编译为纯 JS,因此 {}
括号之间的任何内容都将被评估。您只需指向您的 onClick 中的函数引用,而不是调用它。
使用 ES6 类 时需要绑定到当前的 this
,这有点复杂,因为它不像旧样式那样自动绑定 React.createClass
语法,但这里有一个简单的例子,
class MyComponent {
onLinkClicked () {
console.log('Clicked!')
}
render () {
return (
<a onClick={this.onLinkClicked.bind(this)}>Click me</a>
);
}
}