React-js:在条件渲染中加载时短暂错误 div
React-js: briefly wrong div loaded in conditional rendering
以下脚本允许react-app连接到Metamask,然后显示主页;此外,如果用户已经连接
walletAddress.length>0
,我们想直接显示首页。 (我简化了代码以使其更清晰)
function App() {
const [walletAddress, setWallet] = useState("");
useEffect(() => {
rememberWallet();
addWalletListener();
}, []);
const connectWalletPressed = async () => {
const obj = await getCurrentWalletConnected('eth_requestAccounts')
setWallet(obj.address);
};
async function rememberWallet(){
const obj = await getCurrentWalletConnected('eth_accounts')
setWallet(obj.address)
}
function addWalletListener() {
window.ethereum.on("accountsChanged", (accounts) => {
if (accounts.length > 0) {
setWallet(accounts[0]);
} else {
setWallet("");
}
});
}
console.log(walletAddress)
return (
walletAddress.length>0 ?
<div>HOME PAGE</div>:
<div><button id="walletButton" onClick={connectWalletPressed}>PRESS TO CONNECT METAMASK</button> </div>
);
}
export default App;
重点是:当用户已经连接时,第二个呈现片刻。
非常感谢任何建议ù谢谢
感谢@Hozeis,我们找到了一个使用 50 毫秒超时显示空白页面的解决方法。
function App() {
const [walletAddress, setWallet] = useState("");
const [loading, setLoading] = useState(true);
useEffect(() => {
rememberWallet();
addWalletListener();
setTimeout(() => setLoading(false), 50); //time-out required to assess myContext.walletAddress.length>0 ?
}, []);
const connectWalletPressed = async () => {
const obj = await getCurrentWalletConnected('eth_requestAccounts')
setWallet(obj.address);
};
async function rememberWallet(){
const obj = await getCurrentWalletConnected('eth_accounts')
setWallet(obj.address)
}
function addWalletListener() {
window.ethereum.on("accountsChanged", (accounts) => {
if (accounts.length > 0) {
setWallet(accounts[0]);
} else {
setWallet("");
}
});
}
if (loading) {
return null
}
return (
walletAddress.length>0 ?
<div>HOME PAGE</div>:
<div><button id="walletButton" onClick={connectWalletPressed}>PRESS TO CONNECT METAMASK</button> </div>
);
}
export default App;
以下脚本允许react-app连接到Metamask,然后显示主页;此外,如果用户已经连接
walletAddress.length>0
,我们想直接显示首页。 (我简化了代码以使其更清晰)
function App() {
const [walletAddress, setWallet] = useState("");
useEffect(() => {
rememberWallet();
addWalletListener();
}, []);
const connectWalletPressed = async () => {
const obj = await getCurrentWalletConnected('eth_requestAccounts')
setWallet(obj.address);
};
async function rememberWallet(){
const obj = await getCurrentWalletConnected('eth_accounts')
setWallet(obj.address)
}
function addWalletListener() {
window.ethereum.on("accountsChanged", (accounts) => {
if (accounts.length > 0) {
setWallet(accounts[0]);
} else {
setWallet("");
}
});
}
console.log(walletAddress)
return (
walletAddress.length>0 ?
<div>HOME PAGE</div>:
<div><button id="walletButton" onClick={connectWalletPressed}>PRESS TO CONNECT METAMASK</button> </div>
);
}
export default App;
重点是:当用户已经连接时,第二个呈现片刻。
非常感谢任何建议ù谢谢
感谢@Hozeis,我们找到了一个使用 50 毫秒超时显示空白页面的解决方法。
function App() {
const [walletAddress, setWallet] = useState("");
const [loading, setLoading] = useState(true);
useEffect(() => {
rememberWallet();
addWalletListener();
setTimeout(() => setLoading(false), 50); //time-out required to assess myContext.walletAddress.length>0 ?
}, []);
const connectWalletPressed = async () => {
const obj = await getCurrentWalletConnected('eth_requestAccounts')
setWallet(obj.address);
};
async function rememberWallet(){
const obj = await getCurrentWalletConnected('eth_accounts')
setWallet(obj.address)
}
function addWalletListener() {
window.ethereum.on("accountsChanged", (accounts) => {
if (accounts.length > 0) {
setWallet(accounts[0]);
} else {
setWallet("");
}
});
}
if (loading) {
return null
}
return (
walletAddress.length>0 ?
<div>HOME PAGE</div>:
<div><button id="walletButton" onClick={connectWalletPressed}>PRESS TO CONNECT METAMASK</button> </div>
);
}
export default App;