我剛剛熟悉了終極版,並一直在讀,我應該通過應用程序的父母在行動創通,並通過mapStateToProps,mapDispatchToProps和連接功能我應該可以通過操作。但是,當我調用子組件this.props。該函數不存在,所以它似乎沒有被正確傳遞。陣營本地連接功能,不通過行動來子組件通過道具
我將不勝感激幫助。
注:我留下了一些東西像進口的減速更簡潔。
login.js:
export function login(token, id) {
console.log('login action');
return {
type: 'LOG_IN',
token,
id,
};
}
index.ios.js:
import * as actionCreators from './actions/login'
const store = createStore(RootReducer, undefined, autoRehydrate());
persistStore(store);
class App extends Component {
constructor(props) {
super(props);
state = {
token: '',
id: '',
store: store,
};
}
render() {
return (
<Provider store={ state.store }>
<View style = {styles.container}>
<LoginView/>
</View>
</Provider>
);
}
}
AppRegistry.registerComponent('App',() => App);
function mapStateToProps(state) {
return {
token: state.token,
id: state.id
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({actionCreators}, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
loginView.js:
export class LoginView extends View {
static propTypes = {}
static defaultProps = {}
constructor(props) {
console.log(props);
super(props)
this.state = {
user: '',
token: '',
id: '',
}
this.onLogin = this.onLogin.bind(this);
}
onLogin() {
console.log("on login1");
this.props.login({token: this.state.token, id: this.state.id});
console.log("on login");
}
,基本上會發生什麼情況是,當onLogin()函數直接在上面引發,它聲明this.props.login不是函數。這是什麼原因,我該如何解決它?
謝謝你的迴應。 我用這個指南我的實現:https://medium.com/@MKulinski/react-redux-basics-a36914c0035d#.76dv77xlp 它使人們聽起來像我不需要把它作爲一個道具組件像你所說的那樣。這不是這種情況嗎? – jkurs
是的,那篇文章的措辭很糟糕。 React組件不會神奇地獲得道具 - 它們必須從某個地方傳下去。 'connect'生成一個包裝器組件,將數據道具和功能道具傳遞給你的「真實」組件。所以是的,無論是明確地將'onLogin'方法從'App'傳遞給'LoginView',或者直接連接'LoginView'並在'mapDispatch'中給它'onLogin'。 – markerikson
此外僅供參考,我保持聯繫,以高品質的教程和文章的反應,終極版,以及相關主題,在https://github.com/markerikson/react-redux-links的大名單。很多很好的信息和例子從那裏鏈接。 – markerikson