Передача функции с параметрами для реагирования на контекст - PullRequest
0 голосов
/ 12 января 2020

В моем коде у меня есть этот метод с именем addToArray, объявленный в моем файле приложения. js и переданный для реагирования на контекст через состояние следующим образом: Приложение. js

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      // init values
      array: [],
      ...
      removeFromArray: () => this.removeFromArray(),

      ...
    }
  }
  fetchArray = async () => {
      ...
      this.setState({ array: result });


    } catch (e) {
      alert('Error occured and nothing could be fetched');
    }
  }
  }
  componentDidMount() {
    this.fetchArray();
    ...
  }
    ...

  removeFromArray = (id) => {
    ...
    alert(id);
  }
  render() {
    // variables to init contexts with
    const {
      array,
      removeFromArray
    } = this.state;

    return (
      <GlobalContext.Provider value={{
        array,
        removeFromArray
      }} >
          <Routes />
      </GlobalContext.Provider>
    );
  }
}

Контекст объявляется так: Контекст. js

export const GlobalContext = React.createContext({
 array: [],
 removeFromArray: () => { } 
});

и называется так:

 const btn = (props) => {
      const GlobalCtx = useContext(GlobalContext);
      return(
        <View style={card.editOpacity}>
         <Icon
           name="minus-circle"
           type='font-awesome'
           color='red'
           onPress={() => {
             GlobalCtx.removeFromArray(props.id)
            }} />
          <Text style={card.header}>{props.title}</Text>
         </View>
      );

по некоторым причинам это не так работает, но я думаю, что это может иметь отношение к параметрам и способу передачи в контекст.

1 Ответ

1 голос
/ 13 января 2020

Нет необходимости помещать функцию removeFromArray внутрь state. Вы можете визуализировать вашего провайдера следующим образом

<GlobalContext.Provider value={{
  array,
  removeFromArray: this.removeFromArray
}}>
  <Routes />
</GlobalContext.Provider>

Также не ясно, что это this.removeFromGutka() в функции, которую вы добавили в состояние.

...