为什么要用Web3.js
在最近这几年,区块链技术的发展简直不可阻挡。大家都说区块链会改变世界,而Web3.js就是连接区块链与我们前端应用的钥匙。如果你想让你的React项目和以太坊或其他区块链互动,Web3.js绝对是个不错的选择。
环境准备
首先,你需要有一个已经搭建好的React项目。如果你还没有,不妨用Create React App快速创建一个。打开命令行,输入:
npx create-react-app my-app
然后,进入你的项目文件夹:
cd my-app
安装Web3.js
好了,项目准备就绪后,我们需要安装Web3.js。回到命令行,输入以下命令:
npm install web3
这一步非常简单,这个库会被自动下载到你的项目中。记得在每次用到Web3的地方引入它哦:
import Web3 from 'web3'
与Ethereum网络连接
接下来,我们来看看如何连接到以太坊网络。通常情况下,我们可以使用MetaMask来处理这些事情。用户需要在浏览器里安装MetaMask扩展,并且确保浏览器已连接到正确的以太坊网络(比如Rinkeby测试网络)。
然后在你的组件中类似这样写:
const App = () => {
const [web3, setWeb3] = useState(null);
useEffect(() => {
const initWeb3 = async () => {
// 检查MetaMask是否安装
if (window.ethereum) {
const web3 = new Web3(window.ethereum);
await window.ethereum.request({ method: 'eth_requestAccounts' });
setWeb3(web3);
} else {
alert('请安装MetaMask');
}
};
initWeb3();
}, []);
return 我的Web3应用;
};
交互智能合约
一旦你成功连接到以太坊,接下来可以开始和智能合约互动了。假设我们有一个简单的合约,能够存储一个数字。我们需要合约的ABI和地址。通常这些信息会由合约开发者提供。
你可以在组件中引入ABI和地址,然后像这样调用合约的方法:
const contractAddress = '你的合约地址';
const contractABI = [在这里放你的ABI];
const contract = new web3.eth.Contract(contractABI, contractAddress);
// 调用方法
const callMethod = async () => {
const result = await contract.methods.yourMethod().call();
console.log(result);
};
显示数据在界面
好了,接下来就是把数据展示到页面上的时候啦。你可以用状态管理来保存数据,然后在页面上链接数据的显示。
const [data, setData] = useState(null);
const fetchData = async () => {
const result = await contract.methods.yourMethod().call();
setData(result);
};
return (
{data