'index.js' is main javascript file for our tutorial app. It is the entry point of our app.
It uses 'react-dom' library to render a React element into the DOM in the supplied container('#root') and return a reference to the component. In short, through 'react-dom' our tutorial app's DOM will be populated to <div id="root"></div> in public/index.html file.
2) static/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<title>klay blockchain-based app</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div> <!-- DOM will be populated into here. -->
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
index.html is a HTML file for rendering our tutorial app.
'routes.js' contains the route definition for our tutorial app.
As a root component, 'App.js' component renders child components defined in 'route.js' file.
By above code, 'Count' component would be rendered as a children of rootComponent when browser's URL path is "/".
import React, { Component } from'react'import { cav } from'klaytn/caver'import BlockNumber from'components/BlockNumber'import Auth from'components/Auth'import'./App.scss'classAppextendsComponent {componentWillMount() {/** * sessionStorage is internet browser's feature which stores data * until the browser tab is closed. */constwalletFromSession=sessionStorage.getItem('walletInstance')// If 'walletInstance' value exists, add it to caver's walletif (walletFromSession) {try {cav.klay.accounts.wallet.add(JSON.parse(walletFromSession)) } catch (e) {// If value in sessionStorage is invalid wallet instance,// remove it from sessionStorage.sessionStorage.removeItem('walletInstance') } } }render() {return ( <divclassName="App"> <BlockNumber /> <Auth /> {this.props.children} </div> ) }}exportdefault App
'App.js' is the root component of our tutorial app.
It renders BlockNumber, Auth and {this.props.children} component.
{this.props.children} will be populated according to routes.js file.
If your browser's url path is /, it will render <Count /> component.
componentWillMount() {/** * sessionStorage is internet browser's feature which stores data * until the browser tab is closed. */constwalletFromSession=sessionStorage.getItem('walletInstance')// If 'walletInstance' value exists, add it to caver's walletif (walletFromSession) {try {cav.klay.accounts.wallet.add(JSON.parse(walletFromSession)) } catch (e) {// If value in sessionStorage is invalid wallet instance,// remove it from sessionStorage.sessionStorage.removeItem('walletInstance') } }}
componentWillMount checks if there is a walletInstance session in the browser's sessionStorage.
walletInstance session may not exist if you have never logged in our tutorial app.
Otherwise, walletInstance session will exist as a JSON string, if so, it attempts to add the wallet instance to the caver's wallet.
You can add a wallet instance to caver through cav.klay.accounts.wallet.add(JSON.parse(walletFromSession)).
For further information related caver.klay.accounts.wallet.add, see caver.klay.accounts.wallet.add
cf) JSON.parse is needed since walletInstance session is stored as a JSON string.
5) src/klaytn/caver.js:
/** * caver-js library make a connection with klaytn node. * You could connect to specific klaytn node by changing 'rpcURL' value. * If you are running a klaytn full node, set rpcURL to your node's URL. * ex) rpcURL: 'http://localhost:8551' */import Caver from'caver-js'exportconstconfig= { rpcURL:'https://public-en-baobab.klaytn.net/'}exportconstcav=newCaver(config.rpcURL)exportdefault cav
caver-js library makes a connection to a Klaytn node.
After the connection is made, you can get the current block number from the node and invoke contract methods.
You can connect to a specific Klaytn node by specifying it in the 'rpcURL'.
If you are running a Klaytn full node, you can set rpcURL to your node's URL.