Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

上拉刷新和下拉加载给个开关配置吧 #1

Open
mybedhome opened this issue Jun 13, 2018 · 13 comments
Open

上拉刷新和下拉加载给个开关配置吧 #1

mybedhome opened this issue Jun 13, 2018 · 13 comments

Comments

@mybedhome
Copy link

上拉刷新和下拉加载给个开关配置吧

@javaLuo
Copy link
Owner

javaLuo commented Jun 13, 2018

OK

@javaLuo
Copy link
Owner

javaLuo commented Jun 14, 2018

@1.2.1
加了4个属性

<Luo
    noDown={true} // 关闭下拉刷新 默认false
    noUp={true} // 关闭上拉加载 默认false
    noDownStr={'下拉刷新已关闭'} // 关闭下拉后,下拉刷新区域显示的文字 默认无
   noUpStr={'已全部加载完毕'} //关闭上拉后,上拉加载区域显示的文字 默认无
>
...
</Luo>

@mybedhome
Copy link
Author

那个图标也会隐藏吧?我现在是覆盖你的样式强制隐藏的^_^

@javaLuo
Copy link
Owner

javaLuo commented Jun 14, 2018

图标漏出来了吗,我记得我隐了哦。

刚试了一下, 箭头不转了...

@mybedhome
Copy link
Author

是不转了,但是会报警告:

Warning: Unsafe legacy lifecycles will not be called for components using new component APIs.

e uses getDerivedStateFromProps() but also contains the following legacy lifecycles:
  componentWillMount
  componentWillReceiveProps

The above lifecycles should be removed. Learn more about this warning here:

@javaLuo
Copy link
Owner

javaLuo commented Jun 15, 2018

那个我已经修了。
警告是因为我用React16.4编译的。为了向下兼容,保留了componentWillReceiveProps的调用方法。
不用管,正式打包就没了

@mybedhome
Copy link
Author

mybedhome commented Jun 15, 2018

还有,第一次调用下拉刷新的时候如果没有请求到数据,执行一下this.setState({})方法,就是说state没有有效更新,刷新中的状态一直在那里转。

@javaLuo
Copy link
Owner

javaLuo commented Jun 15, 2018

这样写呢?:

// 原始数据为空数组
this.state = {
    data: []
}

// 请求数据仍然为空,则依然如下调用一下setState:
this.setState({
    data: [],
})

@mybedhome
Copy link
Author

我试过,这样也不行,数据没变,this.props.children就没有变化,是不是应该在组件内部加一个是否是首次调用下拉刷新的状态来判断。

@javaLuo
Copy link
Owner

javaLuo commented Jun 15, 2018

我刚试了一下没出现这个问题,
我的children部分是这样写的:

<Luo>
{
    this.state.data.map((item, index)=>{
        return <div key={index}>...</div>
   })
}
</Luo>

你的children部分是怎么渲染的呢?

@mybedhome
Copy link
Author

mybedhome commented Jun 15, 2018

这是一个聊天页面,我又把组件还原到1.1.0版本了,刷新中的状态目前只能通过设置style为none来隐藏。

<IscrollHz id='scroll-box' onPullDownRefresh={this.getHistoryData.bind(this)}>
            {
              this.state.messages.length > 0 && this.state.messages.map((message,key) => {
                if (message._attributes.from !== `${chatRoomJid}/${user.name}`) {
                  return <li className="recv-box" key={key}>
                    {shoudShowTime(message._attributes.date,key) && <div className="chat-time"><span>{formatTime(message._attributes.date)}</span></div>}
                    {
                      (message.body._text !== '' || (message.body.type && message.body.type._text) )&&
                      <div className="recv-content-box">
                        <div className="avatar">
                          <img src="/images/order/logo.png" alt=""/>
                        </div>
                        <Card message={message} refresh={this.refresh.bind(this)}/>
                      </div>
                    }
                  </li>
                } else {
                  return <li className="send-box" key={key}>
                    {shoudShowTime(message._attributes.date,key) && <div className="chat-time"><span>{formatTime(message._attributes.date)}</span></div>}
                    <div className="send-content-box">
                      <div className="send-content">
                        <div className="msg-content">{message.body.content && message.body.content['_text']} {message.body['_text']}</div>
                        {
                          message.body.extend && message.body.extend.url && message.body.extend.name && <div className="extend">
                            <a href={message.body.extend.url['_text']}>{message.body.extend.name['_text']}</a>
                          </div>
                        }
                      </div>
                      <div className="avatar">
                        <img src="/images/order/fb.png" alt=""/>
                      </div>
                    </div>
                  </li>
                }
              })
            }
          </IscrollHz>

image

@javaLuo
Copy link
Owner

javaLuo commented Jun 15, 2018

那你试试这样写:

<IscrollHz>
 {
  this.state.messages.length ? (this.state.messages.map(...)) : []
}
</IscrollHz>

用三元操作符,没有数据则返回一个空数组

不过这确实是一个问题,我回头考虑一下解决方法

@mybedhome
Copy link
Author

要不你在组件里添加一个属性,你根据这个属性来判断是否已加载完,我在外层组件更新传入的值,比如这样:

<IscrollHz id='scroll-box'  isUpdated={isUpdated} >
......
</IscrollHz>

//我的回调
this.setState({isUpdated: true})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants