前提・実現したいこと
React Native初心者で、簡単な通知アプリを作っています。
"expoPushToken: token" の部分で以下のエラーが発生しています。
初歩的なミスだとは思うのですが、解決の方法がわからず、教えていただけるとうれしいです。
発生している問題・エラーメッセージ
現在、以下のエラーが起きています。
Expected 'this' to be used by class async method 'sendPushNotification'. (class-method-use-this)
https://eslint.org/docs/rules/class-methods-use-this
試したこと
this.setState({ expoPushToken: token });
にも「Unused state field」というエラーが出ていたので、以下のように変更しました。
to: expoPushToken,
↓
to: this.state.expoPushToken,
すると、今度は下記のような別のエラーが出ました。
Must use destructuring state assignment ( react/destructuring-assignment )
https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/destructuring-assignment.md
ソースコード
<途中から引用>
export default class AppContainer extends React.Component { componentDidMount() { this.registerForPushNotificationsAsync(); this.onReceivedListener = Notifications.addNotificationReceivedListener(this.onReceived); this.onResponseReceivedListener = Notifications.addNotificationResponseReceivedListener( this.onResponseReceived, ); } componentWillUnmount() { this.onReceivedListener.remove(); this.onResponseReceivedListener.remove(); } onReceived = (notification) => { console.log(notification); this.setState('notification'); }; onResponseReceived = (response) => { console.log(response); }; registerForPushNotificationsAsync = async () => { if (Constants.isDevice) { const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS); let finalStatus = existingStatus; if (existingStatus !== 'granted') { const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS); finalStatus = status; } if (finalStatus !== 'granted') { alert('Failed to get push token for push notification!'); return; } const { data: token } = await Notifications.getExpoPushTokenAsync(); console.log(token); this.setState({ expoPushToken: token }); } else { alert('Must use physical device for Push Notifications'); } if (Platform.OS === 'android') { Notifications.setNotificationChannelAsync('default', { name: 'default', importance: Notifications.AndroidImportance.MAX, vibrationPattern: [0, 250, 250, 250], lightColor: '#FF231F7C', }); } }; async sendPushNotification(expoPushToken) { const message = { to: this.state.expoPushToken, sound: 'default', title: 'Original Title', body: 'And here is the body!', data: { data: 'goes here' }, }; await fetch('https://exp.host/--/api/v2/push/send', { method: 'POST', headers: { Accept: 'application/json', 'Accept-encoding': 'gzip, deflate', 'Content-Type': 'application/json', }, body: JSON.stringify(message), }); }
回答1件
あなたの回答
tips
プレビュー