javascript - React - 运算符'<'不能应用于类型'void'和'number'
问题描述
我在 StackBlitz 上有一个演示。这是非常伪代码,我的实际代码要复杂得多。
我将三个组件加载到index.tsx
. 每个组件都有一个检查上述布尔值的条件。我的实际代码检查来自 GraphQL 调用的数据。
如果显示组件,我想存储文本。我正在尝试使用useState
. 因此,如果显示“关于”部分,请在nav
状态中添加“关于”。
我收到错误:
Operator '<' cannot be applied to types 'void' and 'number'
谁能解释这个错误,是否可以这样做?
import React, { useState } from "react";
import { render } from "react-dom";
import About from "./About";
import Products from "./Products";
import Contact from "./Contact";
import "./style.css";
const App = () => {
const [nav, setNav] = useState([])
const about = true;
const products = true;
const contact = true;
return (
<div>
{about && (
setNav([...nav, 'About'])
<About />
)}
{products && (
setNav([...nav, 'Products'])
<Products />
)}
{contact && (
setNav([...nav, 'Contact'])
<Contact />)}
</div>
);
};
render(<App />, document.getElementById("root"));
解决方案
我不确定我是否正确理解了您的问题。如果您的代码检查来自 GraphQL 调用的数据,您应该nav
从那里更新状态(在收到响应后立即)并根据该状态显示组件,而不是相反。
您可以使用useEffect
挂钩来获取响应并更新您的状态。我还将使用对象而不是数组来存储导航状态(更新其值更容易)。
function App() {
const [nav, setNav] = React.useState({
about: false,
contact: false,
products: false,
});
React.useEffect(() => {
// make the graphQL call here and based on the response update the state:
const graphqlResponse = {
about: true,
contact: false,
products: true,
// ... others
}
setNav({
about: graphqlResponse.about,
contact: graphqlResponse.contact,
products: graphqlResponse.products,
});
}, []);
return (
<div>
{nav.about && <About />}
{nav.products && <Products />}
{nav.contact && <Contact />}
<pre>{JSON.stringify({nav}, null, 2)}</pre>
</div>
);
};
function About() { return <h2>About</h2> }
function Contact() { return <h2>Contact</h2> }
function Products() { return <h2>Products</h2> }
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- android - Android:当我们点击推送通知时,如何在登录活动/身份验证后打开活动
- c++ - 函数模板中的数组值类型推导
- robotframework - 使用 TypeError 运行 robotsframework 远程库关键字:run_keyword() 恰好需要 4 个参数(给定 3 个)
- reactjs - 反应:从另一个组件调用 setState
- spring - Spring AOP:仅从另一个方法调用的捕获方法
- angularjs - 使用 angularjs 在 MVC .net 应用程序中维护会话
- c# - 从.net core 2.1中的单例服务注入范围服务
- javascript - 我可以让一个属性在 vue v-for 中只出现一次吗
- spring-boot - 如何在 Docker 容器中提供 libgthread-2.0.so.0
- python - Pandas:稀疏数据框到没有 nan 值的字典