我想在客戶端刷新信息,當我在服務器上獲取帶有數據的POST請求時。React + Express - 提取新數據時的刷新頁面
目前看起來像這樣。我在服務器端有POST請求:
app.post('/login',jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400);
if(req.body){
console.log(req.body);
mongodb.connect(dbUrl,function(err,db){
db.collection('markers').insertOne(req.body);
});
return res.sendStatus(200);
}
})
當我成功插入數據庫時,我想自動刷新客戶端。爲了顯示我使用MarkersList分量和MarkerPage組件從數據庫中標記JSON的相關信息:
MarkersList.js
export default function MarkersList({markers}) {
const emptyMessage=(
<p> There are no coordinates to display </p>
);
const markersList=(
<div>{markers.map(marker=> <p>{marker.title}</p>)}</div>
);
return(
<div>
{markers.length === 0 ? emptyMessage:markersList}
</div>
);
}
MarkersList.propTypes={
markers:React.PropTypes.array.isRequired
}
MarkerPage.js
import React from 'react';
import MarkersList from './MarkersList';
import {connect} from 'react-redux';
import {fetchMarkers} from './actions';
class Markers extends React.Component{
componentDidMount(){
this.props.fetchMarkers();
}
render(){
return(
<div>
<p>LISTA</p>
<MarkersList markers={this.props.markers}/>
</div>
)
}
}
Markers.propTypes={
markers: React.PropTypes.array.isRequired,
fetchMarkers: React.PropTypes.func.isRequired
}
function mapStateToProps(state){
return{
markers:state.markers
}
}
export default connect(mapStateToProps,{fetchMarkers})(Markers);
actions.js
export const SET_MARKERS='SET_MARKERS';
export function setMarkers(markers){
return{
type:SET_MARKERS,
markers
}
}
export function fetchMarkers(){
return dispatch => {
fetch('/api/markers')
.then(res=>res.json())
.then(data=>dispatch(setMarkers(data.markers)));
;
}
}
index.js - 客戶端:
const store= createStore(
rootReducer,
composeWithDevTools(
applyMiddleware(thunk) //dispach asynchronous actions
)
)
render(
<BrowserRouter>
<Provider store={store}>
<div>
<Route path="/" component={App}></Route>
<Route path="/markers" component={Markers}></Route>
</div>
</Provider >
</BrowserRouter>
,document.getElementById('app'));
我應該怎麼做才能從服務器端發出類似於操作的動作,這將允許我在客戶端顯示數據庫的當前狀態?
好的我使用套接字並思考它。怎麼只使用Redux?有可能這樣做嗎?我是React/Redux的新手。 – Mateusz
@Mateusz:redux真的與套接字模式兼容。這是IMAO做的好方法。 –