誰かが問題を簡単な言葉で説明してくれませんか。そうすれば、これを修正する方法を知っており、次に遭遇したときに対処できます。私はstackoverflowで見つけたすべての関連する質問を調べましたが、修正できませんでした。これに答える質問を見逃した場合は、リンクしてください。私は過去にこのエラーが発生しましたが、通常はタイプミス(小文字ではなく大文字など)があったか、正しくインポートされなかったためですが、今回はそうではありません。最初のコードapp.js2番目のコードinteractions.js
これが私のコードです
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Navbar from './Navbar'
import Web3 from 'web3';
import { connect } from 'react-redux'
// import Token from '../abis/Token.json'
import {
loadWeb3,
loadAccount,
loadToken,
loadExchange
} from '../store/interactions'
class App extends Component {
componentWillMount() {
this.loadBlockchainData(this.props.dispatch)
}
async loadBlockchainData(dispatch) {
const web3 = loadWeb3(dispatch)
const network = await web3.eth.net.getNetworkType()
const networkId = await web3.eth.net.getId()
const accounts = await loadAccount(web3, dispatch) // <<--
const token = loadToken(web3, networkId, dispatch)
loadExchange(web3, networkId, dispatch)
}
// ......................
function mapStateToProps(state) {
return {
account: accountSelector(state)
}
}
export default connect(mapStateToProps)(App);
import Web3 from 'web3'
import {
web3Loaded,
web3AccountLoaded,
tokenLoaded,
exchangeLoaded
} from './actions'
import Token from '../abis/Token.json'
import Exchange from '../abis/Exchange.json'
export const loadWeb3 = (dispatch) => {
const web3 = new Web3(Web3.givenProvider || 'http://localhost:7545')
dispatch(web3Loaded(web3))
return web3
}
export const loadAccount = async (web3, dispatch) => {
const accounts = await web3.eth.getAccounts()
const account = accounts[0]
dispatch(web3AccountLoaded(account))
return account
}
export const loadToken = async (web3, networkId, dispatch) => {
try {
const token = new web3.eth.Contract(Token.abi, Token.networks[networkId].address) // new 이거 의존성(버전) 문제 이거 조심!!!!!
dispatch(tokenLoaded(token))
return token
} catch (error) {
window.alert('Contract not deployed to the current network. Please select another network with Metamask.')
return null
}
}
export const loadExchange = async (web3, networkId, dispatch) => {
try {
const exchange = new web3.eth.Contract(Exchange.abi, Exchange.networks[networkId].address)
dispatch(exchangeLoaded(exchange))
return exchange
} catch (error) {
window.alert('Contract not deployed to the current network. Please select another network with Metamask.')
return null
}
}
なぜこれが私に起こっているのかわかりませんが、この問題を知っている場合は、この問題を知らせてください
問題は、accountSelector
関数をどこにも定義またはインポートしていないことのようです。
通常、Reduxセレクター関数はレデューサー定義ファイルで定義します。これらは現在のReduxストアの状態を引数(およびオプションで接続されたコンポーネントの小道具)として受け取り、MapStateToPropsオブジェクトプロパティで使用される値を返します。例
export const accountSelector = (state) => state.account
セレクターの詳細については、専用のReduxリソースページをご覧ください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加