用react+webpack+redux+MongoDB+express写博客问题集锦。
1、server.js中设置views路径和模板
前提是先安装ejs插件
var ejs = require('ejs'); app.set('views', './view'); //设定页面目录 app.set('view engine', 'ejs'); //设置ejs引擎
express中默认ejs作为view引擎,若要改为HTML使用一下方法
app.engine('.html', ejs.__express); //将默认ejs引擎改为HTML引擎 app.set('view engine', 'html');
2、子路由和父路由不在同一个页面时子路由的安放问题
需要子路由内容显示在哪个标签内时就可以把子路由放在那里,这好像是react-router-dom 4和之前的版本不同的地方,之前的版本是子路由嵌套在父路由里面,新版本可以将子路由剥离出来,这是本人当时在做的时候很令我头疼的地方(哈哈,本人比较笨,都别笑话哈),举个例子吧
index.js
ReactDOM.render(, document.getElementById("main") ); //父路由
需要将子路由内容显示在别的板块里
app.js
//子路由1 //子路由2
3、render中存在if语句怎么办
可以用三目运算符,还有冒号前后如果有多个标签需要用一个标签将这些标签包起来,另外render里面的内容也必须用一个标签将它们包起来,举例说明
{
this.state.nickname==="" ? 您还未登录,请
登录 : 你好,{this.state.nickname} 退出 }
上述代码中“你好”和“退出”所在的span标签外若没有另一个外围span标签, 那里将会报错。
4、render中不能使用this.setState
因为每执行一次this.setState,render中都会重新渲染,渲染过程中又会重新执行this.setState,这样会陷入死循环。
5、路由向组件传值
同样举例说明:
组件Publish需要接收参数id,在组件Publish中可以这样获取this.props.match.params.id,当时无意中打印this.props才知道要这样获取。。。
6、页面跳转问题
(1)回退:this.props.history.goBack();
(2)跳转到指定页面:this.props.history.push(path);
有些方法不知道怎么用可以将其打印出来:console.log(this);
7、render中使用map方法罗列数组
(1)没有return的情况
{
arr.map(val => ({val}))
}
(2)有return的情况
{
arr.map(val => {
return {val}
})
}
8、render渲染的集中情况
(1)首次加载
(2)使用setState
(3)接收到新的props
9、this.props的值
这些值有从父组件传递过来的,有从reducer传递过来的,任何组件使用connect(mapStateToProps,mapDispatchToProps)()后都会接收到来自reducer的state值。举例说明:
A页面被触发去改变state后进入B页面,B页面有两个组件,B页面上没有触发改变state,则B页面和这两个组件都会接收来自A页面的state,若A页面没有,则A页面的state来自A页面的上一个页面,以此类推。
如果不清楚每个页面获取的state可以在mapStateToProps中将其打印出来。