首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件语句总是返回false (内联样式)。

条件语句总是返回false (内联样式)。
EN

Stack Overflow用户
提问于 2021-11-19 23:23:25
回答 2查看 116关注 0票数 0

条件语句每次都返回false,即使它“应该”返回true.

代码语言:javascript
复制
  const Navy = () => {
    const [content, setContent] = useState(<Today/>)


    const homepage = () => {
      setContent(<Today/>);
    }
    const accountpage = () => {
      setContent(<Account/>);
    }
return(
             <Nav >
                <ul className='menuItems'>
                  <div className='mainmenu'>
                    <Nav.Link className='linkitem' style={{color: content === useState(<Today/>) ?  'red' : 'blue'}}>
                       <li onClick={homepage}> 
                        <i class="fa fa-home" aria-hidden="true"></i>
                        Home
                        <div className='arrow'>
                          <i class="fa fa-angle-double-right" ></i>
                        </div>
                      </li>
                    </Nav.Link>
                    <Nav.Link className='linkitem' style={{color: content === useState(<Today/>) ?  'red' : 'blue'}}>
                      <li onClick={accountpage}>
                        <i class="fa fa-cog" aria-hidden="true"></i>
                        Account
                        <div className='arrow'>
                          <i class="fa fa-angle-right"></i>
                        </div>
                      </li>
                    </Nav.Link>
                   </div>
                 <ul/>
              </Nav>
)}

我的目标是,如果组件当前正在使用,则这一行返回为true (当前返回false,不管如何):

代码语言:javascript
复制
<Nav.Link className='linkitem' style={{color: content === useState(<Today/>) ?  'red' : 'blue'}}>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-19 23:48:39

<Today />是组件的基础:每次调用<Today />时,都会创建一个新的、不同的对象。无论如何,您应该比较content,而不是useState(content)

您可以尝试一个棘手的(未经测试的)解决方案,如:

代码语言:javascript
复制
content.constructor.name === 'Today' ? ...

否则,您可以将状态更改为国旗:

代码语言:javascript
复制
 const [content, setContent] = useState('today')

然后,比较肯定有效,您可以选择render with:

代码语言:javascript
复制
content === 'today' ? <Today> : <Account>

,但我建议您使用反应路由器DOM提供一个更干净的解决方案

然后:

代码语言:javascript
复制
const YourComponent = () => {
const location = useLocation();
... 
return <>
    // when you want to select color
    matchPath(location, {path: '/today'}) ? 'color1' : 'color2'

    // when you choose what component show
    <Switch>
        <Route exact path="/today">
             <Today>
        </Route>
        <Route exact path="/account">
             <Account>
        </Route>
    </Switch>
</>
票数 2
EN

Stack Overflow用户

发布于 2021-11-20 01:45:40

useState(某物)总是给出一个包含2件事的数组

  1. 价值
  2. updateFuncion

因此,您将与包含值updateValueFunction的数组进行比较。

在这里输入图像描述

加了一张照片。

如果您尝试比较内容和useState(),那么您仍然会与整个2个对象有一些不同。

因此,您仍然必须检查两个相同的检查-- content.type === useState().type 在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70041946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档