Реагируйте setState для const, объявленного внешним конструктором - PullRequest
1 голос
/ 30 сентября 2019

Я новичок в React. Я создал компонент класса и есть конструктор.

Я создал this.state внутри функции конструктора.

Вкл. componentDidMount Я вызвал несколько функций, и в этих функциях создал const.

Могу ли я использовать this.setState({}) для тех переменных, которые объявлены вне конструктора и созданы и вызваны в функции componentDidMount()?

Я получил ошибку, когда пытался использовать такие переменные в другой функции.

Мой код следующий:

class App extends Component {
   constructor(props) {
     super(props);
     this.state = {
       web3: null,
       network: "",
       account: 0x0
  };
}

 componentDidMount = async () => {
  await this.loadWeb3();
};

 loadWeb3 = async () => {
  const web3 = await getWeb3();
  const accounts = await web3.eth.getAccounts();
  this.setState({ account: accounts[0] });
 const networkId = await web3.eth.net.getId();
this.setState({ networkId });
this.setState({ web3 });
console.log(web3); //
console.log(networkId); //got sucessfully console log over here
await this.setNetwork();
};

setNetwork = async () => {
  let networkName,
   that = this;

  await this.state.web3.eth.net.getNetworkType(function(err, network) {
    switch (network) {
    case "main":
      networkName = "Main";
      break;
    case "morden":
      networkName = "Morden";
      break;
    case "ropsten":
      networkName = "Ropsten";
      break;
    case "private":
      networkName = "Ganache";
      break;
    default:
      networkName = this.state.networkId; //but got error over here "Unhandled Rejection (TypeError): Cannot read property 'state' of undefined"
  }

  that.setState({
    network: networkName
  });

  console.log(this.state.network);
});
};

Я получил следующую ошибку в setNetwork ()регистр переключения по умолчанию

необработанное отклонение (TypeError): невозможно прочитать свойство 'состояние' из неопределенного

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Согласно документам :

Обещание возвращает строку:

Вы можете использовать:

const network = await this.state.web3.eth.net.getNetworkType();

setState({ network });
1 голос
/ 30 сентября 2019

Ошибка возникает из-за того, что не весь ваш код имеет функции стрелок ...

  await this.state.web3.eth.net.getNetworkType(function(err, network) {

, в частности, эта часть теряет this функции ...

Я быПерепишите это как

await this.state.web3.eth.net.getNetworkType((err, network) => {

или используйте that, который вы определили в функции как верхний, просто this, к которому вы пытаетесь получить доступ на коммутаторе, не является this что у вас было раньше. Использование функций со стрелками решит эту проблему «контекста» для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...