iscroll-luo icon indicating copy to clipboard operation
iscroll-luo copied to clipboard

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

Open mybedhome opened this issue 7 years ago • 13 comments

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

mybedhome avatar Jun 13 '18 08:06 mybedhome

OK

javaLuo avatar Jun 13 '18 12:06 javaLuo

@1.2.1 加了4个属性

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

javaLuo avatar Jun 14 '18 02:06 javaLuo

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

mybedhome avatar Jun 14 '18 12:06 mybedhome

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

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

javaLuo avatar Jun 14 '18 12:06 javaLuo

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

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:

mybedhome avatar Jun 15 '18 06:06 mybedhome

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

javaLuo avatar Jun 15 '18 06:06 javaLuo

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

mybedhome avatar Jun 15 '18 08:06 mybedhome

这样写呢?:

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

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

javaLuo avatar Jun 15 '18 08:06 javaLuo

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

mybedhome avatar Jun 15 '18 08:06 mybedhome

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

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

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

javaLuo avatar Jun 15 '18 08:06 javaLuo

这是一个聊天页面,我又把组件还原到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

mybedhome avatar Jun 15 '18 10:06 mybedhome

那你试试这样写:

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

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

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

javaLuo avatar Jun 15 '18 11:06 javaLuo

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

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

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

mybedhome avatar Jun 19 '18 02:06 mybedhome