В предыдущей части этой серии руководств вы узнали, как реализовать функцию обновления и удаления записей для нашего блогового приложения React. В этом руководстве вы реализуете страницу профиля для приложения блога.
Начиная
Давайте начнем с клонирования исходного кода из последней части серии.
|
1
|
https://github.com/royagasthyan/ReactBlogApp-EditDelete
|
После того, как каталог был клонирован, перейдите в каталог проекта и установите необходимые зависимости.
|
1
2
|
cd ReactBlogApp-EditDelete
npm install
|
Запустите сервер Node.js, и приложение будет запущено по адресу http: // localhost: 7777 / index.html # / .
Создание просмотра страницы профиля
Сначала вам нужно добавить новый пункт меню в меню домашней страницы под названием Profile . На странице home.html добавьте новый элемент ul для страницы профиля, как показано ниже:
|
1
2
3
4
5
6
|
<ul class=»nav nav-pills pull-right»>
<li role=»presentation» id=»homeHyperlink» class=»active»><a href=»#»>Home</a></li>
<li role=»presentation» id=»addHyperLink»><a href=»/home#/addPost»>Add</a></li>
<li role=»presentation» id=»btnProfile»><a href=»/home#/showProfile»>Profile</a></li>
<li role=»presentation»><a href=»#»>Logout</a></li>
</ul>
|
Сохраните вышеуказанные изменения и перезагрузите сервер. В браузере укажите http: // localhost: 7777 / и войдите в приложение. После входа в систему вы сможете просмотреть список меню со ссылкой на профиль.

Чтобы ссылка в меню профиля работала, вам нужно добавить новый маршрут к существующим маршрутам в файле home.jsx .
|
1
2
3
4
5
6
7
|
ReactDOM.render(
<Router history={hashHistory}>
<Route component={ShowPost} path=»/»></Route>
<Route component={AddPost} path=»/addPost(/:id)»></Route>
<Route component={ShowProfile} path=»/showProfile»></Route>
</Router>,
document.getElementById(‘app’));
|
В файле home.jsx создайте новый компонент ShowProfile . Добавьте некоторые переменные состояния для name , password , email и Id . В методе ShowProfile компонента ShowProfile добавьте HTML- ShowProfile для отображения деталей профиля. Вот как ShowProfile компонент ShowProfile :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
class ShowProfile extends React.Component {
constructor(props) {
super(props);
this.state = {
name:»,
email:»,
password:»,
id:»
};
}
componentDidMount(){
document.getElementById(‘addHyperLink’).className = «»;
document.getElementById(‘homeHyperlink’).className = «»;
document.getElementById(‘profileHyperlink’).className = «active»;
this.getProfile();
}
updateProfile(){
}
getProfile(){
}
render() {
return (
<div className=»col-md-5″>
<div className=»form-area»>
<form role=»form»>
<br styles=»clear:both» />
<div className=»form-group»>
<input value={this.state.name} type=»text» onChange={this.handleNameChange} className=»form-control» placeholder=»Name» required />
</div>
<div className=»form-group»>
<input value={this.state.password} type=»password» onChange={this.handlePasswordChange} className=»form-control» placeholder=»Password» required />
</div>
<button type=»button» onClick={this.updateProfile} id=»submit» name=»submit» className=»btn btn-primary pull-right»>Update</button>
</form>
</div>
</div>
)
}
}
|
Когда страница профиля загружена, вам нужно извлечь данные из базы данных и заполнить ее в форме. Добавьте код в метод getProfile внутри компонента ShowProfile чтобы вызвать AJAX для получения подробных сведений о пользователе.
|
1
2
3
4
5
6
7
8
|
axios.post(‘/getProfile’, {
})
.then(function (response) {
})
.catch(function (error) {
console.log(‘error is ‘,error);
});
|
Как только детали получены в ответе, вам необходимо обновить переменные состояния для них. Вот метод getProfile из компонента ShowProfile :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
getProfile(){
var self = this;
axios.post(‘/getProfile’, {
})
.then(function (response) {
if(response){
self.setState({name:response.data.name});
self.setState({email:response.data.email});
self.setState({password:response.data.password});
}
})
.catch(function (error) {
console.log(‘error is ‘,error);
});
}
|
Внутри файла app.js создайте метод getProfile который будет обрабатывать вызов метода POST из метода ShowProfile getProfile . Метод app.js файле app.js вместо этого вызовет user.js для получения подробностей из базы данных. Вот как это выглядит:
|
1
2
3
4
5
|
app.post(‘/getProfile’, function(req,res){
user.getUserInfo(sessions.username, function(result){
res.send(result)
})
})
|
Внутри файла user.js создайте метод getUserInfo который будет запрашивать базу данных MongoDB, используя имя пользователя, чтобы получить необходимые данные. Вот как выглядит метод getUserInfo :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
getUserInfo: function(username, callback){
MongoClient.connect(url, function(err, db){
db.collection(‘user’).findOne( { email : username
},function(err, result){
if(result==null){
callback(false)
}
else{
callback(result);
}
});
});
}
|
Как видно из приведенного выше кода, вы вызываете MongoDB, используя MongoClient для запроса коллекции пользователей на основе адреса электронной почты. Как только результат получен, он возвращается обратно в функцию обратного вызова.
Сохраните вышеуказанные изменения и перезапустите сервер Node.js. В браузере укажите http: // localhost: 7777 / # / и войдите в приложение. Нажмите на ссылку профиля в меню, и вы сможете просмотреть информацию о профиле, заполненную на странице.

Обновление профиля пользователя
Чтобы обработать изменение имени и пароля, вам нужно определить два метода с handleNameChange и handlePasswordChange в компоненте ShowProfile . Эти методы устанавливают переменные состояния при изменении текста. Вот как это выглядит:
|
1
2
3
4
5
6
|
handleNameChange(e){
this.setState({name:e.target.value})
}
handlePasswordChange(e){
this.setState({password:e.target.value})
}
|
ShowProfile методы в конструкторе ShowProfile .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
constructor(props) {
super(props);
this.handleNameChange = this.handleNameChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
this.updateProfile = this.updateProfile.bind(this);
this.getProfile = this.getProfile.bind(this);
this.state = {
name:»,
email:»,
password:»,
id:»
};
}
|
Определите метод с именем updateProfile который будет вызываться, когда пользователь нажимает кнопку « Update для обновления сведений о пользователе. Внутри метода updateProfile выполните POST-вызов метода app.js файле app.js вместе с измененным name и password . Вот как updateProfile метод ShowProfile компоненте ShowProfile :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
updateProfile(){
var self = this;
axios.post(‘/updateProfile’, {
name: this.state.name,
password: this.state.password
})
.then(function (response) {
if(response){
hashHistory.push(‘/’)
}
})
.catch(function (error) {
console.log(‘error is ‘,error);
});
}
|
После получения ответа на вызов POST экран переходит к списку сообщений в блоге.
Внутри файла app.js создайте метод updateProfile который будет анализировать переданные параметры и вызывать базу данных MongoDB.
|
1
2
3
4
5
6
7
8
|
app.post(‘/updateProfile’, function(req, res){
var name = req.body.name;
var password = req.body.password;
user.updateProfile(name, password, sessions.username, function(result){
res.send(result);
})
})
|
Как видно из приведенного выше кода, после анализа параметров в методе app.js файле user.updateProfile метод user.updateProfile с измененным name , password и username .
Давайте определим метод user.updateProfile внутри файла user.js , который будет вызывать MongoDB данных MongoDB и обновлять name и password на основе имени username . Вот как updateProfile метод user.js файле user.js :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
updateProfile: function(name, password, username, callback){
MongoClient.connect(url, function(err, db) {
db.collection(‘user’).updateOne(
{ «email»: username },
{ $set:
{ «name» : name,
«password» : password
}
},function(err, result){
if(err == null){
callback(true)
}
else{
callback(false)
}
});
});
}
|
В приведенном выше коде вы обновили данные пользователя на основе адреса электронной почты, используя метод updateOne .
Сохраните вышеуказанные изменения и перезагрузите сервер. Войдите в приложение и нажмите на ссылку Профиль . Измените имя и пароль и нажмите кнопку Обновить . Попробуйте войти, и вы сможете войти, используя новый пароль.
Завершение
В этом руководстве вы реализовали страницу профиля для приложения блога. Вы узнали, как получать данные из базы данных и заполнять их на странице с помощью React. Вы также реализовали функциональность для обновления деталей профиля.
Исходный код из этого урока доступен на GitHub . Дайте мне знать ваши мысли или любые предложения в комментариях ниже.