一、点击元素,获取绑定该事件的父级元素,使用 e.currentTarget。e.target 获取的是,出发该事件的元素,该元素有多是所绑定事件的元素的子元素。react
二、使用 react router4数组
history 只能传递给儿子组件,不能传递给孙子组件react-router
若是孙子组件须要,能够经过 props 传递过去函数
三、关于 react-router 不一样页面 根据地址栏标识的不一样请求渲染不一样的内容this
this.props.history.push({ pathname:'', state:{} });
把页面跳转时要传递的参数放到 state 里面,这样页面刷新的时候经过 location.state 也能读取到该值spa
四、昨天忽然想重构下代码,整理下 state,结果碰到了一个调试很久没找到的问题调试
问题代码:code
1 // metric 是一个数组,保存在 store 里面,经过 mapStateToProps 传递的 2 that.props.metric.map((val)=>{ 3 // addColorSelect 根据 metric 每一个值添加相应的设置 4 configureStore.dispatch(addColorSelect(val)); 5 })
问题:触发相应的操做,发现怎么样,dispatch 里面的函数没有相应的执行结果。而后因为思惟太发散,一度找错了解决方向component
今天早上冷静的调试了下,发现了问题所在router
因为个人 val 直接用的是 store 中 metric 的值,在 action 返回值中,metric 的每一个值都携带了 type 字段。这与 addColorSelect 对应 action 的 type 产生了冲突,因此没有想要的效果
解决问题代码:
1 that.props.metric.map((val)=>{ 2 delete val.type;//删除val中携带的action.type便可 3 configureStore.dispatch(addColorSelect(val)); 4 })
总结:看来找错误必定不要病急乱投医,认真看值传递的方向以及特定属性内容仍是很重要的
五、不要随便使用 state 的状态来进行判断,由于 state 更改是须要通过声明周期函数的,若是修改state后,一味根据 state 状态进行判断,有时会出现臆想不到的错误。
合理的作法是,根据某个值更新 state 状态,而后根据该值进行下一步操做,判断.....
今天就遇到一个坑,就是明明能够经过 flag 标示来判断元素该是隐藏仍是显示,却恰恰用了 state,这样致使个人显示状态老是滞后一步,用了好长时间才找到问题所在,我心里也是呜呜呜呜的。若是使用 flag 直接判断的话,而后修改 state,我就不须要去管 state 在执行流程,任他怎么执行,个人显示状态是正确的便可
六、在进行写一个功能比较多的项目的时候,学会借助思惟导图,进行逻辑梳理。由于作公司项目的时候,一次行评完需求进行开发,致使需求太多越作越混乱,因此开发时花费一部分事件进行逻辑梳理会起到事半功倍的做用。小伙伴们学起来哦~
七、获取真实的DOM元素方法:
a一、首先给组件的元素添加 ref 属性,例如:<div ref='thisDom'><div/>
a二、在 componentDidMount 函数中经过 this.refs.thisDom 就能够获取到。之因此是在 componentDidMount 中获取是由于,在组件第一次 render 的时候才会读取到 ref ,并赋值给 this的 refs 属性。
八、某个组件的操做,触发另一个组件内容的更改。能够经过借助 PubSub-js 来解决,具体作法以下:
a一、首先在一个组件中注册一个 pubsub 方法,例如:在组件A的 constructer中注册,this.tocken = PubSub.subscribe('事件名称', 触发事件的回调函数)
a二、为防止事件屡次被注册,在组件 componentWillUnmount 函数中须要销毁事件 PubSub.unsubscribe(this.token)
a三、在须要触发该事件的地方写 PubSub.sublish('对应的事件名称','要传入回调函数中的内容')
a四、⚠️须要注意的是,不管回调函数传入什么,第一个参数永远是 '事件名称'