Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在reactjs中的方法内调用方法_Javascript_Reactjs - Fatal编程技术网

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不应使用“()”调用。它应该