Class/Functional 组件,内部方法
Class/Functional component, methods within
我是 ReactJs 的新手,我想了解更多细节。
在 Class 组件中,这些是我知道的两种可以声明处理程序方法来更改状态的方法
classChangeState=()=>{
this.setState({
Person:[
{firstName:"test", secondName:55}
]
})
}
classChangeState2(){
console.log("Inside Change state click")
this.setState({
Person:[
{firstName:"test", secondName:55}
]
})enter code here
//classChangeState2 require me to bind "this" inside render method
在功能组件中,我可以通过以下两种方式实现
function changeStateClick(){
changeState({
Person:[
{firstName: "Just aasefaesfstring property", secondName: 32}
]
})
}
const changeStateClick2 =()=> changeState({
Person:[
{firstName: "Just a[[[string property", secondName: 32}
]
})
我有几个问题
1) React 如何知道 classChangeState2 是没有 "function" 的方法?
2) 我知道我可以在上述所有方法中将 newName 作为参数传递,但我必须在所有方法的渲染中绑定 "THIS"。例如
methodName.bind(这个,"newNamehere")
这是为什么?即使对于最初我不需要绑定的功能组件,当我想添加 "newName" 作为参数时,我现在也必须绑定。有人可以解释一下吗?
classChangeState=(newName)=>{
this.setState({
Person:[
{firstName:newName, secondName:55}
]
})
}
I have a few questions 1) how does React know that classChangeState2
is a method without the "function"?
它与 React 无关,而是 ES6。 类 是语法糖,它们只是特殊函数。您所看到的方法只是分配给方法名称的函数的缩写。所以当你这样写的时候:
class fooClass {
bar(...) {}
}
fooClass
实际上是一个函数,其中的方法例如bar
被写入fooClass.prototype
。另外,你还想看看,
Starting with ECMAScript 2015, a shorter syntax for method
definitions on objects initializers is introduced. It is a shorthand
for a function assigned to the method's name.
const obj = {
foo() {
return 'bar';
}
};
console.log(obj.foo());
您可以在 MDN- Classes and function-definitions MDN
上了解更多
来到问题的第二部分,
2) I know that I can pass in a newName as parameters in all of the
above methods above but I must bind "THIS" in the render for all
methods. For e.g methodName.bind(this,"newNamehere")
此语法是 实验性的 class 属性,您可以使用它来代替 bind
构造函数中的方法。请注意,此语法可能会更改。
阅读更多https://reactjs.org/docs/react-without-es6.html#autobinding
https://babeljs.io/docs/en/babel-plugin-transform-class-properties/
我是 ReactJs 的新手,我想了解更多细节。
在 Class 组件中,这些是我知道的两种可以声明处理程序方法来更改状态的方法
classChangeState=()=>{
this.setState({
Person:[
{firstName:"test", secondName:55}
]
})
}
classChangeState2(){
console.log("Inside Change state click")
this.setState({
Person:[
{firstName:"test", secondName:55}
]
})enter code here
//classChangeState2 require me to bind "this" inside render method
在功能组件中,我可以通过以下两种方式实现
function changeStateClick(){
changeState({
Person:[
{firstName: "Just aasefaesfstring property", secondName: 32}
]
})
}
const changeStateClick2 =()=> changeState({
Person:[
{firstName: "Just a[[[string property", secondName: 32}
]
})
我有几个问题 1) React 如何知道 classChangeState2 是没有 "function" 的方法?
2) 我知道我可以在上述所有方法中将 newName 作为参数传递,但我必须在所有方法的渲染中绑定 "THIS"。例如 methodName.bind(这个,"newNamehere")
这是为什么?即使对于最初我不需要绑定的功能组件,当我想添加 "newName" 作为参数时,我现在也必须绑定。有人可以解释一下吗?
classChangeState=(newName)=>{
this.setState({
Person:[
{firstName:newName, secondName:55}
]
})
}
I have a few questions 1) how does React know that classChangeState2 is a method without the "function"?
它与 React 无关,而是 ES6。 类 是语法糖,它们只是特殊函数。您所看到的方法只是分配给方法名称的函数的缩写。所以当你这样写的时候:
class fooClass {
bar(...) {}
}
fooClass
实际上是一个函数,其中的方法例如bar
被写入fooClass.prototype
。另外,你还想看看,
Starting with ECMAScript 2015, a shorter syntax for method definitions on objects initializers is introduced. It is a shorthand for a function assigned to the method's name.
const obj = {
foo() {
return 'bar';
}
};
console.log(obj.foo());
您可以在 MDN- Classes and function-definitions MDN
上了解更多来到问题的第二部分,
2) I know that I can pass in a newName as parameters in all of the above methods above but I must bind "THIS" in the render for all methods. For e.g methodName.bind(this,"newNamehere")
此语法是 实验性的 class 属性,您可以使用它来代替 bind
构造函数中的方法。请注意,此语法可能会更改。
阅读更多https://reactjs.org/docs/react-without-es6.html#autobinding
https://babeljs.io/docs/en/babel-plugin-transform-class-properties/