Javascript 在reactjs中的方法内调用方法
我想在这样的另一个方法中调用一个方法,但它从未被调用 按钮:Javascript 在reactjs中的方法内调用方法,javascript,reactjs,Javascript,Reactjs,我想在这样的另一个方法中调用一个方法,但它从未被调用 按钮: <span onClick={this.firstMethod()}>Click me</span> 调用第一个方法,但不调用第二个方法。我试图添加到构造函数中 this.secondMethod = this.secondMethod.bind(this); 这在所有其他解决方案中都是推荐的,但对我来说似乎没有任何效果。如何正确调用第二个方法?而不是firstMethod=()=>(event)尝试fir
<span onClick={this.firstMethod()}>Click me</span>
调用第一个方法,但不调用第二个方法。我试图添加到构造函数中
this.secondMethod = this.secondMethod.bind(this);
这在所有其他解决方案中都是推荐的,但对我来说似乎没有任何效果。如何正确调用第二个方法?而不是
firstMethod=()=>(event)
尝试firstMethod=>(event)=>,而不是secondMethod=()=>(event)=>{
尝试secondMethod=>(event)
尝试firstMethod=>(event)
尝试firstMethod=>(event)=>
,而不是secondMethod=()=>(event)=>{
尝试secondMethod=(event)=>{
您的第二个方法返回一个新函数,它是多余的。
另外,第二个方法不能绑定,因为第一个方法已经有了上下文
secondMethod=()=>(事件)=>{…}
应该是secondMethod(evnt){…}
这是一个工作和优化的示例您的第二个方法返回一个新函数,该函数是冗余的。
另外,第二个方法不能绑定,因为第一个方法已经有了上下文
secondMethod=()=>(事件)=>{…}
应该是secondMethod(evnt){…}
下面是一个有效且优化的示例坏消息是您无法绑定
箭头函数,因为它们是词汇绑定的。请参阅:
好消息是“词汇绑定”这意味着他们应该已经将App作为他们的
this
,也就是说,它应该没有显式绑定。你可能会将它们重新定义为未定义的,或者在构造函数中以这种方式处理它们,从而导致一些奇怪的事情。坏消息是,你不能绑定箭头函数,因为它们是词汇绑定的。请参阅:
好消息是,“词汇绑定”意味着他们应该已经将App作为他们的this
,也就是说,它应该没有显式绑定。你可能会将它们重新定义为未定义的,或者在构造函数中以这种方式处理的一些奇怪的事情。这里有两个问题
第一:你定义的函数是错误的
firstMethod = () => (event) => {
console.log("button clicked")
this.secondMethod();
}
这样,您将从函数返回另一个函数。因此,它应该是:
firstMethod = ( event ) => {
console.log("button clicked")
this.secondMethod();
}
<span onClick={() => this.firstMethod()}>Click me</span>
第二:您没有使用onClick
处理程序,而是立即调用函数
<span onClick={this.firstMethod()}>Click me</span>
使用此方法,不会在每次组件呈现时重新创建函数,因为它将处理程序函数与其引用一起使用。此外,手动编写处理程序也不会有困难
最后,如果将函数定义为箭头函数,则不需要。绑定它们
这是工作代码
类应用程序扩展了React.Component{
firstMethod=()=>{
console.log(“单击按钮”)
this.secondMethod();
}
secondMethod=()=>
log(“从未调用过它!”)
//或者更好的方法是不使用箭头函数
//第二个方法,因为它已经绑定到'this',因为我们
//从第一个方法调用它。有关详细信息,请查看注释。
/*第二种方法(){
log(“从未调用过它!”)
} */
render(){
返回(
点击我
)
}
}
const rootElement=document.getElementById(“根”);
ReactDOM.render(,rootElement);
这里有两个问题
第一:你定义的函数是错误的
firstMethod = () => (event) => {
console.log("button clicked")
this.secondMethod();
}
这样,您将从函数返回另一个函数。因此,它应该是:
firstMethod = ( event ) => {
console.log("button clicked")
this.secondMethod();
}
<span onClick={() => this.firstMethod()}>Click me</span>
第二:您没有使用onClick
处理程序,而是立即调用函数
<span onClick={this.firstMethod()}>Click me</span>
使用此方法,不会在每次组件呈现时重新创建函数,因为它将处理程序函数与其引用一起使用。此外,手动编写处理程序也不会有困难
最后,如果将函数定义为箭头函数,则不需要。绑定它们
这是工作代码
类应用程序扩展了React.Component{
firstMethod=()=>{
console.log(“单击按钮”)
this.secondMethod();
}
secondMethod=()=>
log(“从未调用过它!”)
//或者更好的方法是不使用箭头函数
//第二个方法,因为它已经绑定到'this',因为我们
//从第一个方法调用它。有关详细信息,请查看注释。
/*第二种方法(){
log(“从未调用过它!”)
} */
render(){
返回(
点击我
)
}
}
const rootElement=document.getElementById(“根”);
ReactDOM.render(,rootElement);
试试这个,它对我有用
firstMethod = () => {
console.log("click handler for button is provided")
return (event) => this.secondMethod(event);
}
secondMethod = (event) => {
console.log("This is being called with", event);
}
试试这个,对我有用
firstMethod = () => {
console.log("click handler for button is provided")
return (event) => this.secondMethod(event);
}
secondMethod = (event) => {
console.log("This is being called with", event);
}
您是否可以使用以下url进行检查:
我认为您使用了错误的绑定方法,但在这里您可以看到一个示例
class App extends Component {
constructor() {
super();
this.state = {
num: 1,
};
this.firstMethod = this.firstMethod.bind(this);
this.secondMethod = this.secondMethod.bind(this);
}
firstMethod() {
this.secondMethod();
}
secondMethod() {
this.setState({
num: 2
});
}
render() {
return (
<div className="App">
<button onClick={this.firstMethod}>click</button>
<label>{this.state.num}</label>
</div>
);
}
}
类应用程序扩展组件{
构造函数(){
超级();
此.state={
数目:1,,
};
this.firstMethod=this.firstMethod.bind(this);
this.secondMethod=this.secondMethod.bind(this);
}
第一种方法(){
this.secondMethod();
}
第二种方法(){
这是我的国家({
总数:2
});
}
render(){
返回(
点击
{this.state.num}
);
}
}
您可以使用以下url进行检查:
我认为您使用了错误的绑定方法,但在这里您可以看到一个示例
class App extends Component {
constructor() {
super();
this.state = {
num: 1,
};
this.firstMethod = this.firstMethod.bind(this);
this.secondMethod = this.secondMethod.bind(this);
}
firstMethod() {
this.secondMethod();
}
secondMethod() {
this.setState({
num: 2
});
}
render() {
return (
<div className="App">
<button onClick={this.firstMethod}>click</button>
<label>{this.state.num}</label>
</div>
);
}
}
类应用程序扩展组件{
构造函数(){
超级();
此.state={
数目:1,,
};
this.firstMethod=this.firstMethod.bind(this);
this.secondMethod=this.secondMethod.bind(this);
}
第一种方法(){
this.secondMethod();
}
第二种方法(){
这是我的国家({
总数:2
});
}
render(){
返回(
点击
{this.state.num}
);
}
}
和onClick
event/prop不应使用“()”调用。它应该