Truffle Drizzle error "TypeError: Cannot read property 'address' of undefined"

Truffle Drizzle error "TypeError: Cannot read property 'address' of undefined"

预期:

在 运行 应用程序之后,用户应该会在浏览器中看到一条 "Loading Drizzle..." 消息,然后很快就会看到 "Drizzle is ready"

结果:

应用停留在 "Loading Drizzle..." 并且 chrome 控制台出现错误:

错误

uncaught at root at root

at contractsSaga

at takeEvery

at addContract

at instantiateContract

TypeError: Cannot read property 'address' of undefined

我在这里学习本教程:https://truffleframework.com/tutorials/getting-started-with-drizzle-and-react

我在当前部分:

替换渲染方法

render() {
  if (this.state.loading) return "Loading Drizzle...";
  return <div className="App">Drizzle is ready</div>;
}

我已经在我的应用程序中完成了该操作,并希望看到 "Drizzle is ready" 消息,但却收到了上述错误。

这是我的回购协议:https://github.com/leongaban/truffle_drizzle_test

没有合约部署到您的 ganache 网络,这就是发生该错误的原因。

在文件夹的根目录中,确保 运行 truffle migratetruffle compile.

之后

truffle migrate 会将您的合约部署到您的区块链网络上,然后输出一个包含您的合约信息的文件 build/contracts/YourContract.json。例如,它包含你的合约的 ABI 和你的合约部署的地址。

您的 JavaScript 可能会导入该 JSON 文件,以便获得连接到您的合同所需的信息。因此,请确保 JS 正在导入最新版本的JSON,否则它将不知道在哪个地址找到您的合约等

即使在将合约正确部署到我的 ganache 网络之后,我也遇到了同样的问题。它对我不起作用的原因是我在 Chrome 浏览器上激活了 MetaMask。我什至没有登录,但似乎 dapp 正在错误的网络上寻找合约。当我使用隐身模式/完全禁用 MetaMask 打开网站时,它可以正常工作!

这是教程指出的,但我想很容易不认真对待:

Note: Make sure to use an incognito window if you already have MetaMask installed (or disable MetaMask for now). Otherwise, the app will try to use the network specified in MetaMask rather than the development network under localhost:8545.