【发布时间】:2018-11-05 16:55:41
【问题描述】:
我有以下代码:
// Packages
import React, { Component } from 'react';
import Web3 from 'web3';
import Header from './components/Header';
class App extends Component {
constructor(props) {
super(props);
this.state = {
account: null,
contract: null,
}
}
componentDidMount = () => {
if (typeof window.web3 !== 'undefined') {
this.state.web3.eth.getAccounts((err, accounts) => {
if(err)
throw err;
} else {
this.state.web3.eth.defaultAccount = accounts[0];
this.contract = new this.state.web3.eth.Contract(abi.abi, this.contractAddress);
this.setState({
account : accounts[0],
contract : this.contract
});
}
});
} else {
console.log('No web3? You should consider trying MetaMask!')
}
}
render() {
console.log(this.state);
return (
<div className="App">
<Header
account = {this.state.account}
web3={this.state.web3}
contract={this.state.contract}
/> </div>
);
}
}
export default App;
如果 setState 完成,我希望 Header 组件重新渲染,并且在 componentDidMount 中的 setState 函数之后使用更新的状态调用渲染函数。
如果我登录我的 Header 组件,它只会被调用一次并且道具不会得到更新..
...
class Header extends React.Component {
constructor(props) {
super(props);
this.state = {
accountBalance: "-",
formattedAddress: '0x0...000',
account: '0x0'
}
}
componentDidMount(){
console.log('rendered');
}
...
我完全不知道可能出了什么问题..
【问题讨论】:
-
componentDidMount只会被调用一次。尝试登录render。 -
可以,谢谢!是否有重新渲染的事件?我想访问我更新的道具,而不会弄乱渲染功能。
-
componentDidUpdate等。在此处查看所有生命周期 reactjs.org/docs/react-component.html#updating -
太棒了,非常感谢.. 我只是在错误的地方搜索
标签: javascript reactjs components rendering web3