reactjs - 试图在我的主屏幕中显示注册名称
问题描述
嗨,所以我有一个应用程序,该人注册自己并被带到主屏幕,在那里我有一个已注册的每个人的平面列表。我想让它可以显示在主屏幕上登录的用户名,如 Welcome {user}。我仍然是初学者,所以任何帮助都会很有用。这是我的代码:-
注册屏幕:-
function SignupScreen(props) {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [name, setName] = useState('');
const sendCred = async (props) => {
fetch('http://10.0.0.2/signup', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
password: password,
name: name,
}),
})
.then((res) => res.json())
.then(async (data) => {
try {
await AsyncStorage.setItem('token', data.token);
props.navigation.navigate('Home');
} catch (e) {
console.log('error', e);
}
});
};
return (
<TextInput
label="Email"
mode="outlined"
value={email}
style={{ marginLeft: 18, marginRight: 18, marginTop: 18 }}
theme={{ colors: { primary: 'blue' } }}
onChangeText={(text) => setEmail(text)}
/>
<TextInput
label="password"
mode="outlined"
secureTextEntry={true}
value={password}
onChangeText={(text) => {
setPassword(text);
}}
style={{ marginLeft: 18, marginRight: 18, marginTop: 18 }}
theme={{ colors: { primary: 'blue' } }}
/>
<TextInput
label="Name"
value={name}
mode="outlined"
onChangeText={(text) => setName(text)}
style={{ marginLeft: 18, marginRight: 18, marginTop: 18 }}
theme={{ colors: { primary: 'blue' } }}
/>
);
}
主屏幕:-
function HomeScreen({ navigation }) {
const [data, setData] = useState([]);
const [name, setName] = useState('');
const [loading, setLoading] = useState(true);
const fetchData = () => {
fetch('http://10.0.0.2/')
.then((res) => res.json())
.then((results) => {
setData(results);
setName(results.name);
setLoading(false);
})
.catch((err) => {
Alert.alert('something went wrong in HomeScreen_fetchData()');
});
};
useEffect(() => {
fetchData();
}, []);
const renderList = (item) => {
return (
<Card
style={styles.mycard}
onPress={() => navigation.navigate('Profile', { item })}>
<View style={styles.cardView}>
<Image
style={{ width: 60, height: 60, borderRadius: 50 / 2 }}
source={{
uri: item.picture,
}}
/>
<View style={{ marginLeft: 10 }}>
<Text style={styles.text}>{item.name}</Text>
<Text>{item.position}</Text>
</View>
</View>
</Card>
);
};
return (
<CustomHeader title="Home" />
<View style={{ flex: 1 }}>
<Text>Your name is {name}</Text>
<FlatList
data={data}
renderItem={({ item }) => {
return renderList(item);
}}
keyExtractor={(item) => item._id}
onRefresh={() => fetchData()}
refreshing={loading}
/>
</View>
);
}
解决方案
仅当您有 jwt 令牌时,这才有效
一旦你这样做了(我们假设你已经将用户存储在令牌中):
.then(async (data) => {
try {
await AsyncStorage.setItem('token', data.token);
props.navigation.navigate('Home');
您可以创建一个将返回当前用户的文件(例如 Service/auth.service.js),我们使用jwt-decode(您需要从 nmpjs 导入)来解码令牌:
/**
* Return current user
*/
const getCurrentUser = () => {
const token = localStorage.getItem("token");
return jwtDecode(token);
};
export default {getCurrentUser}
然后,您可以将其导入 Home 组件,如下所示:
import AuthService from "hereThePath/Services/auth.service"
const user = AuthService.getCurrentUser();
console.log(`this is the user name ${user.name}`);
推荐阅读
- python - 如何对要下载的推文设置限制?
- botframework - 在 Azure 聊天机器人的 Directline 语音中添加对各种口音的支持
- javascript - CSS/JS 未链接到 HTML 页面
- c# - 用 DataTable 填充的 SqlDataAdapter 不起作用
- hibernate - spring data jpa 如何管理每个事务的会话?
- git - Azure ML,DevOps:在分支之间切换会保留来自另一个分支的一些文件
- python-3.x - 是否有任何稳定版本的脚本/程序可以将 PASCAL VOC 数据集格式转换为 TFRecord?
- python - 从烧瓶python中的mysqlphp获取行的值
- python - ValueError:layersequential_2 的输入 0 与 layer 不兼容::预期 min_ndim=4,发现 ndim=2。收到的完整形状:[无,40]
- javascript - 从 Javascript 字符串中删除文本