Потяните до Refre sh и setState не работает - React Native - PullRequest
0 голосов
/ 29 мая 2020

Приложение React Native Я использую Pull для refre sh в моем свойстве Flatlist "onRefre sh" onRefre sh вызвал функцию «refreshcontrol ()», см. код ниже. Мне нужно изменить состояние "обновление" на true, прежде чем я буду получать данные из своего API. Но он выдает максимальную ошибку обновления.

export default class NotificationScreen extends Component {


  constructor(props) {
   super(props)
   this.state = {
      refreshing: false 
    }
  }
.
.
.
.
.
  refreshControl() {
    const { refreshing } = this.state;
    this.setState({ refreshing : true )}.    // throws maximum update error

    return (
      <RefreshControl
        refreshing={refreshing}
        onRefresh={fetchNotifications.bind(this)}      //fetch from API only when refreshing is true
        colors={['#2B70AD']}
      />
    );
  };


}

Как еще я могу установить свое состояние на «refreshing: true» ??? Помогите пожалуйста !!!!

Вот так исправили. Решение:

refresh = async() => {
    this.setState({refreshing : true})
    try {
      const notifications = await fetchNotifications();
      this.setState({
        notifications,
        error: null,
        refreshing: false
      });
    } catch (error) {
      this.setState({
        notifications: [],
        error,
        refreshing: false
      });
    }
  }

  refreshControl() {
    const { refreshing } = this.state;

    return (
      <RefreshControl
        refreshing={refreshing}
        onRefresh={this.refresh}
        colors={['#2B70AD']}
      />
    );
  };

Ответы [ 2 ]

2 голосов
/ 29 мая 2020
  refreshFlatlist = () => {
    this.setState(
      {
        refresh: true,
      },
      () => this.getTodosHandler()
    );
    this.setState({
      refresh: false,
    });
  };

Вот как я обновляю sh состояние по умолчанию, конечно, false. todosHandler всегда хранит текущие задачи. Это вызов базы данных SQLite, хранящейся на телефоне локально.

Теперь плоский список RefreshComponent, который я использовал:

   <FlatList
            refreshControl={
              <RefreshControl
                refreshing={this.state.refresh}
                onRefresh={this.refreshFlatlist}
              />
            }
            extraData={this.state.refresh}
            data={this.state.toDoArray}
            keyExtractor={(item, index) => item.id.toString()}
            renderItem={({ item }) => ( ... 

Посмотрите, может он вам поможет - это работает для меня как шарм;)

0 голосов
/ 29 мая 2020

Это должно работать отлично. Я думаю, в вашем коде есть опечатка. Вы используете try вместо true. Думаю, это могло быть причиной ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...