React Native:可能未处理的承诺拒绝(id:0)
React Native: Possible Unhandled Promise Rejection (id: 0)
所以我正在尝试通过 React-Native 了解更多关于 Redux 的信息。
我正在尝试使用 Axios 发出 HTTPS 请求以从 Web 服务器中提取数据。一切 运行 都很好,我控制台记录了操作,有效负载是我需要的数据。但它仍然会抛出“无法读取 属性 'data' of null”TypeError。
以下是我的代码:
import React, { Component } from 'react';
import ReduxThunk from 'redux-thunk';
import { StackNavigator } from 'react-navigation';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reducers from '../reducers';
import ReduxTestObj from '../components/ReduxTestObj';
export default class ReduxTest extends Component {
render() {
return (
<Provider store={createStore(reducers, {}, applyMiddleware(ReduxThunk))}>
<ReduxTestObj />
</Provider>
);
}
}
这是 ReduxTestObj
import React, { Component } from 'react';
import _ from 'lodash';
import { View } from 'react-native';
import { connect } from 'react-redux';
import DevBanner from './DevBanner';
import Header from './Header';
import { actionCreator } from '../actions';
class ReduxTestObj extends Component {
componentWillMount() {
this.props.actionCreator('urlIWantToGoTo');
}
getBannerText() {
if (this.props.loading) {
return 'PULLING DATA. GIVE ME A SECOND';
}
const rObj = _.map(this.state.data[1].recipient_list);
const rName = [];
for (let i = 0; i < rObj.length; i++) {
rName[i] = rObj[i].team_key.substring(3);
}
const winnerMSG = `Teams ${rName[0]}, ${rName[1]}, ${rName[2]}, ${rName[3]} Won`;
return winnerMSG;
}
render() {
return (
<View>
<Header
text={'Redux Testing'}
/>
<DevBanner
message={this.getBannerText()}
/>
</View>
);
}
}
const mapStateToProps = state => {
return {
data: state.tba.data,
loading: state.tba.loading
};
};
export default connect(mapStateToProps, { actionCreator })(ReduxTestObj);
这是 Action Creator
import axios from 'axios';
import { TBA_PULL } from './Types';
export const actionCreator = (url) => {
return (dispatch) => {
axios({
method: 'get',
url,
responseType: 'json',
headers: {
'Auth-Key':
'Hidden For Obvious Reasons'
},
baseURL: 'theBaseUrlOfTheWebsite'
}).then(response => {
dispatch({ type: TBA_PULL, payload: response.data });
});
};
};
这是 Reducer
import { TBA_PULL } from '../actions/Types';
const INITIAL_STATE = { data: [], loading: true };
export default (state = INITIAL_STATE, action) => {
console.log(action);
switch (action.type) {
case TBA_PULL:
return { ...state, loading: false, data: action.payload };
default:
return state;
}
};
如上所述,console.log(action) 打印出来并且它拥有的数据是正确的。但它继续抛出以下错误:
Error1
我试过改变周围的东西,谷歌搜索,搜索,删除 Action Reducer 以使其尽可能基本,只需返回一个字符串。它拒绝工作。
有没有人 运行 遇到类似的问题或知道如何解决它?
感谢您的宝贵时间。
编辑:我还在 ReduxTestObj 中将控制台记录为 'this' 作为 getBannerText() 的第一行,它成功返回了 this.props.data 作为我想要的数据,而 this.props.loading 为 false。然而它仍然抛出同样的错误。
拜托。我想我只是犯了一个错误。
我在 getBannerText() 中调用 This.state.data 而不是 this.props.data。
解决了问题。
所以我正在尝试通过 React-Native 了解更多关于 Redux 的信息。
我正在尝试使用 Axios 发出 HTTPS 请求以从 Web 服务器中提取数据。一切 运行 都很好,我控制台记录了操作,有效负载是我需要的数据。但它仍然会抛出“无法读取 属性 'data' of null”TypeError。
以下是我的代码:
import React, { Component } from 'react';
import ReduxThunk from 'redux-thunk';
import { StackNavigator } from 'react-navigation';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reducers from '../reducers';
import ReduxTestObj from '../components/ReduxTestObj';
export default class ReduxTest extends Component {
render() {
return (
<Provider store={createStore(reducers, {}, applyMiddleware(ReduxThunk))}>
<ReduxTestObj />
</Provider>
);
}
}
这是 ReduxTestObj
import React, { Component } from 'react';
import _ from 'lodash';
import { View } from 'react-native';
import { connect } from 'react-redux';
import DevBanner from './DevBanner';
import Header from './Header';
import { actionCreator } from '../actions';
class ReduxTestObj extends Component {
componentWillMount() {
this.props.actionCreator('urlIWantToGoTo');
}
getBannerText() {
if (this.props.loading) {
return 'PULLING DATA. GIVE ME A SECOND';
}
const rObj = _.map(this.state.data[1].recipient_list);
const rName = [];
for (let i = 0; i < rObj.length; i++) {
rName[i] = rObj[i].team_key.substring(3);
}
const winnerMSG = `Teams ${rName[0]}, ${rName[1]}, ${rName[2]}, ${rName[3]} Won`;
return winnerMSG;
}
render() {
return (
<View>
<Header
text={'Redux Testing'}
/>
<DevBanner
message={this.getBannerText()}
/>
</View>
);
}
}
const mapStateToProps = state => {
return {
data: state.tba.data,
loading: state.tba.loading
};
};
export default connect(mapStateToProps, { actionCreator })(ReduxTestObj);
这是 Action Creator
import axios from 'axios';
import { TBA_PULL } from './Types';
export const actionCreator = (url) => {
return (dispatch) => {
axios({
method: 'get',
url,
responseType: 'json',
headers: {
'Auth-Key':
'Hidden For Obvious Reasons'
},
baseURL: 'theBaseUrlOfTheWebsite'
}).then(response => {
dispatch({ type: TBA_PULL, payload: response.data });
});
};
};
这是 Reducer
import { TBA_PULL } from '../actions/Types';
const INITIAL_STATE = { data: [], loading: true };
export default (state = INITIAL_STATE, action) => {
console.log(action);
switch (action.type) {
case TBA_PULL:
return { ...state, loading: false, data: action.payload };
default:
return state;
}
};
如上所述,console.log(action) 打印出来并且它拥有的数据是正确的。但它继续抛出以下错误: Error1
我试过改变周围的东西,谷歌搜索,搜索,删除 Action Reducer 以使其尽可能基本,只需返回一个字符串。它拒绝工作。 有没有人 运行 遇到类似的问题或知道如何解决它?
感谢您的宝贵时间。
编辑:我还在 ReduxTestObj 中将控制台记录为 'this' 作为 getBannerText() 的第一行,它成功返回了 this.props.data 作为我想要的数据,而 this.props.loading 为 false。然而它仍然抛出同样的错误。
拜托。我想我只是犯了一个错误。
我在 getBannerText() 中调用 This.state.data 而不是 this.props.data。
解决了问题。