未定義です:私はthis
に関数をバインドするconstructor
にthis.fetchUser = this.fetchUser.bind(this);
:機能は、私は次のコードブロックを持っている
class App extends Component {
constructor(props) {
super(props);
this.state = {
avatar: '',
...some more data...
}
this.fetchUser = this.fetchUser.bind(this);
}
render() {
return (
<div>
<SearchBox onSubmit={this.fetchUser}/>
<Card data={this.state} />
<BaseMap center={this.state.address}/>
</div>
);
}
componentDidMount() {
function fetchUser(username) {
let url = `https://api.github.com/users/${username}`;
this.fetchApi(url);
};
function fetchApi(url) {
fetch(url)
.then((res) => res.json())
.... some data that is being fetched ....
});
};
let url = `https://api.github.com/users/${this.state.username}`;
}
}
export default App;
しかし、私は次の行のためのTypeError: Cannot read property 'bind' of undefined
を取得します。
componentDidMount
メソッドが表示され、バインディングに使用できるようにするにはどうすればよいですか?
編集:私はcomponentDidMount
内の関数を入れている
理由は、StackOverflowの上の他のユーザーからの提案でした。あなたは本当に、親のデータをフェッチ 、状態doesntのは、本当にアドレスオブジェクトを保持していないためという
@BirdMars:彼はそれを示唆しました。親の componentDidMountにあるフェッチを呼び出し、そこで状態を更新します。これは 秒それは(あなたが取得し、更新状態を終えるまで、最初のコースの空state.address となりますレンダリング)
あなたはcomponentDidMount' ''外fetchUser'と 'fetchApi'を入れていない理由はいかなる理由がこれを行う必要がありますか? –
@BirdMarsあなたは 'componentDidMount'でこれらの関数を呼び出すことができますが、それらを外部に定義することができます。 – Walk
'componentDidMount'の外に関数を移動したり、関数を使わないのはなぜですか? – topher