首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未声明(React)中的条件句

未声明(React)中的条件句
EN

Stack Overflow用户
提问于 2019-02-04 22:44:26
回答 2查看 121关注 0票数 0

我正在学习在我的react应用程序中实现未声明的。

我做了一个简单的应用程序,使用Unstated显示一个Note。

这是我的NoteContainer:

代码语言:javascript
复制
class NoteContainer extends Container {
    state = {
        title: 'My Note',
        desc: 'This note state is managed with unstated',
        isDisplaying: false,
    }

    constructor() {
        super()
        this.show = this.show.bind(this);
    }

    show() {
        this.setState({ isDisplaying: !this.state.isDisplaying })
        console.log(this.state);
    }
}

如您所见,非常简单,它只需更改状态中的isDisplaying属性,这样我就可以在Note.js组件上使用它来显示注释的标题和消息,如下所示:

代码语言:javascript
复制
class Note extends Component {
    state = {
        isShowing: false,
    }

    render() {
        if (this.state.isShowing) {
            return (
                <Subscribe to={[NoteContainer]}>
                    {noteContainer => (
                        <div className="container">
                            <p>{noteContainer.state.title}</p>
                            <p>{noteContainer.state.desc}</p>
                        </div>
                    )}
                </Subscribe>
            )
        }
        return (
                <Subscribe to={[NoteContainer]}>
                    {noteContainer => (

                        <div className="container">
                            <button className="btn btn-success" onClick={() => {
                                noteContainer.show();
                                this.setState({
                                    isShowing: noteContainer.state.isDisplaying,
                                })
                                console.log(this.state);
                            }}>
                                See Note!
                            </button>
                        </div>
                    )}
                </Subscribe>
            )
    }
}

所需的功能是当我点击See Note!按钮时,它会在按钮上方显示注释的标题和说明,如果我再次单击它,它会隐藏它们。

但是,我得到的是它创建了另一个Subscribe组件,这似乎删除了"See Note!“按钮部分。这是结果的图像。

问题是我不能再次使用按钮来隐藏备注信息,我显然是错误地使用了subscribe组件,但我不能想出另一种方式来使用条件使用unstated,所以在这方面的任何帮助都将不胜感激。

提前感谢,祝你一周愉快!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-04 23:47:06

我已经设法用内联if条件函数解决了这个问题。然而,我对这个解决方案感到不舒服,我想知道如何实现一个完整的if条件,所以如果有人知道请留下评论!

代码语言:javascript
复制
render() {
        return (
            <Subscribe to={[NoteContainer]}>
                {noteContainer => (
                    <div className="container">
                        <p>{noteContainer.state.isDisplaying ? noteContainer.state.title : ''}</p>
                        <p>{noteContainer.state.isDisplaying ? noteContainer.state.desc : ''}</p>
                        <button className="btn btn-success" onClick={() => {
                            noteContainer.show();
                        }}>
                            See Note!
                        </button>
                    </div>
                )}
            </Subscribe>
        )
    }
票数 0
EN

Stack Overflow用户

发布于 2019-02-04 22:59:59

这是一个反模式:

代码语言:javascript
复制
this.setState({ isDisplaying: !this.state.isDisplaying })

先勾选,然后设置状态:

代码语言:javascript
复制
let answer = this.state.isDisplaying ? true : false
this.setState({isDisplaying: answer})

或者使用prevState变量

代码语言:javascript
复制
this.setState((prevState, props) => ({
  isDisplaying: prevState.isDisplaying ? true : false
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54518576

复制
相关文章

相似问题

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