【发布时间】:2018-04-11 22:10:58
【问题描述】:
我想从_signIn const 调用onSignIn 函数。我想知道这是否有可能。我尝试将其称为广告 onSignIn() 或 Login.onSignIn() 但没有任何效果。
const _signIn = values => {
let email = values.email;
let password = values.password;
console.log(email + ' ' + ' ' + password);
return {email, password};
}
const Login = createReactClass({
getInitialState: function() {
return {
loading: false
}
},
onSignIn: function() {
var {dispatch} = this.props;
this.setState({
loading: true
});
dispatch(loginUser(email, password)).then(() => {
this.setState({
loading: false
});
});
},
这里调用_signInconst
return (
<View style={{flex: 1, flexDirection: 'column', margin: 40, justifyContent: 'flex-start'}}>
<Field keyboardType='email-address' label='Email' component={renderField} name='email'/>
<Field keyboardType='default' label='Password' component={renderFieldPass} name='password'/>
<TouchableOpacity onPress={handleSubmit(_signIn)} style={{margin: 10, alignItems: 'center'}}>
<Text style={{
backgroundColor: 'steelblue', color: 'white', fontSize: 16,
height: 37, width: 200, textAlign: 'center', padding: 10
}}>Login</Text>
</TouchableOpacity>
</View>
);
App.js
var App = createReactClass({
getInitialState() {
return {}
},
render() {
var renderMainView = () => {
if (this.props.user_id) {
return (
<Main />
);
} else {
return (
<Login />
);
}
}
return (
<View style={{flex: 1}}>
<StatusBar barStyle="light-content"/>
{renderMainView()}
<AlertContainer/>
</View>
)
}
});
【问题讨论】:
-
问题缺少stackoverflow.com/help/mcve。您没有在任何地方调用 onSignIn,也不清楚在哪里调用 _signIn。
-
XY Problem。要调用非静态函数,您首先需要该类的实例,您可以在该实例上调用该函数。除此之外,我不认为这是正确的方法。你能提供更多关于上下文的细节吗?
-
@estus _signIn 在 onPress={} 下的渲染中被调用,但我需要来自 _signIn 的值才能在 onSignIn 中传递它们
-
也没有 onPress。请让问题中的代码反映这一点。 MCVE 是代码相关问题的要求。
-
我明白了。这是XY问题。您不能使用 onSignIn,因为没有可以检索的 Login 实例。 TouchableOpacity 和 Login 都应该有共同的父组件(例如 Auth),它将保持
loading状态并提供更改它的方法(通过将 onLogin、onLogoout 道具传递给嵌套组件等)。这是设计问题,我建议检查一下简单的第三方 auth React 组件的工作原理。
标签: javascript reactjs react-native ecmascript-6