は作業WebpackBinは、私は2つのコンポーネントを持ってReactコールバックバインドがnullになるのはなぜですか?
https://www.webpackbin.com/bins/-Kibrw5tNNrsQpENUv_M
、下記のリンクで見つけることができます。親コンポーネントは、子コンポーネントに関数を渡し、子コンポーネントのイベントハンドラは、func.bind(null, num)
によって渡された関数を呼び出して、余分なプリセット引数を提供します。
なぜdummyFunc.bind(null, 666)
が機能するのですか?bind
新しく作成された関数this
のコンテキストはnull
になりますか?したがって、this.setState
はすべて未定義になります。
親コンポーネントコード、
import React from 'react'
import Component from './Component'
export default class Hello extends React.Component {
constructor(props) {
super(props)
this.state = {
foo: 2
}
this.foo = this.foo.bind(this)
}
foo(newValue) {
this.setState({
foo: newValue + this.state.foo
})
console.log(this.state.foo)
}
render() {
return (
<div>
<h1>App</h1>
<Component dummyFunc={this.foo} />
</div>
)
}
}
子コンポーネントコード、
import React from 'react'
const Component = ({dummyFunc}) => {
return (
<div>
<button onClick={dummyFunc.bind(null, 666)}>BUTTON</button>
</div>
)
}
export default Component
あなたの666は非常に666なので、私はあなたにダブルクリック666を与えます! – Littlee
'this.foo = this.foo.bind(this)'は既に別のコンテキストにそれを明示的にバインドしています – Bergi
'dummyFunc.bind(null)'を実行することで再バインドされますか? –