Javascript 调用方法与使用函数调用方法
假设我们在这样的类中有一个方法Javascript 调用方法与使用函数调用方法,javascript,reactjs,Javascript,Reactjs,假设我们在这样的类中有一个方法 class Blog extends Component { postClicked = (id) => { this.setState({selectedPostId: id}) } render () { const newPosts = this.state.posts.map(el => { return <Post key={el.id} title={el.t
class Blog extends Component {
postClicked = (id) => {
this.setState({selectedPostId: id})
}
render () {
const newPosts = this.state.posts.map(el => {
return <Post key={el.id}
title={el.title}
author={el.author}
onClick={this.postClicked(el.id)}/>
})
return
//something
{post}
}
}
}
类博客扩展组件{
点击后=(id)=>{
this.setState({selectedPostId:id})
}
渲染(){
const newPosts=this.state.posts.map(el=>{
返回
})
返回
//某物
{post}
}
}
}
现在,像这样调用处理程序有什么区别
class Blog extends Component {
postClicked = (id) => {
this.setState({selectedPostId: id})
}
render () {
const newPosts = this.state.posts.map(el => {
return <Post key={el.id}
title={el.title}
author={el.author}
onClick={this.postClicked(el.id)}/>
})
return
//something
{post}
}
}
}
onClick={this.postClicked(el.id)}
和onClick={()=>this.postClicked(el.id)}
如果有人能告诉我两者的区别,我们将不胜感激。第一个将在每次渲染完成时调用该函数
第二个将执行您想要的操作—称之为onClick。第一个将在每次渲染完成时调用该函数
第二个会做你想做的事-称之为onClick。你可以读这篇博客,它会把事情弄清楚的你可以读这篇博客,它会把事情弄清楚的
var variableName = function(){//some content};
onClick={variableName}
var variableName = function(){//some content};
onClick={variableName}
<Post id={el.id} />
然后你可以做:
<Post
id={el.id}
onClick={this.postClicked}
/>
this.postClicked = (event) => {
const { id } = event.target;
...
}
this.postClicked=(事件)=>{
const{id}=event.target;
...
}
最后一个选项避免使用未命名函数。如果使用未命名函数,将导致不必要的重新渲染。React在检查是否应重新渲染时,无法通过考虑组件的道具是否已更改来判断未命名函数是否相同。每次检查时,它都会将未命名的函数视为新的道具,从而导致每次不必要的重新渲染
总的来说,它不会破坏你的应用程序,但如果你做得足够的话,它会稍微降低性能。它会出现,尤其是当你开始使用“反应运动”(React Motion)时(你会注意到其中的差异)。如果可能的话,最好避免使用未命名的函数。第一个选项“this.postClicked(el.id)”实际上会在每次组件渲染时使用“el.id”参数调用方法“this.postClicked”(可能不是预期的)
第二个选项,“()=>this.postClicked(el.id)”,将仅在单击“Post”时调用带有“el.id”参数的方法“this.postClicked”
总之,如果您能找到一种方法将“el.id”参数放入组件的“id”或“name”属性中
<Post id={el.id} />
然后你可以做:
<Post
id={el.id}
onClick={this.postClicked}
/>
this.postClicked = (event) => {
const { id } = event.target;
...
}
this.postClicked=(事件)=>{
const{id}=event.target;
...
}
最后一个选项避免使用未命名函数。如果使用未命名函数,将导致不必要的重新渲染。React在检查是否应重新渲染时,无法通过考虑组件的道具是否已更改来判断未命名函数是否相同。每次检查时,它都会将未命名的函数视为新的道具,从而导致每次不必要的重新渲染
总的来说,它不会破坏你的应用程序,但如果你做得足够的话,它会稍微降低性能。它会出现,尤其是当你开始使用“反应运动”(React Motion)时(你会注意到其中的差异)。如果可能的话,最好避免使用未命名的函数。在Ecmascript 6 javascript引入is arrow函数之后 这里的
()==>{//code}
类似于函数()
或匿名函数
在使用is arrow函数引入Ecmascript 6 javascript之后,如果您找到了想要的内容,请告诉我 这里的
()==>{//code}
类似于函数()
或匿名函数
如果你找到了你想要的,告诉我你的问题似乎已经得到了回答。不过还有一点需要注意:记住,在为方法指定箭头函数时
onClick={ () => this.method() }
每次重新渲染时都会创建一个新的匿名函数。因此,如果方法不需要任何参数,最好直接引用该方法(不带括号,因此不会调用)
看来你的问题已经得到了回答。不过还有一点需要注意:记住,在为方法指定箭头函数时
onClick={ () => this.method() }
每次重新渲染时都会创建一个新的匿名函数。因此,如果方法不需要任何参数,最好直接引用该方法(不带括号,因此不会调用)