悬剑请抬头 發表於 2019-9-28 14:43:00

React == 实现简易购物车

<p>React == 实现简易版购物车</p>
<p>  1、几个要点:</p>
<p>  为了方便后面使用input type = "checkbox" 实现复选框的选中/不选中,给传递过来的属性要在遍历的时候,单独加上一个新属性 checked&nbsp;</p>
<p>  count 属性 默认值 都是1.</p>
<p>  state = {</p>
<pre><span>     all : false<span>,
      sumprice :0<span>,
      one : false<span>,
      sumcount:0</span></span></span></span></pre>
<p>  }&nbsp;</p>
<p>  state对象 :&nbsp;</p>
<ul>
<li>  all -----&gt; 用来定义全选按钮</li>
<li>  sumprice -----&gt; 用来定义总价</li>
<li>&nbsp; &nbsp; &nbsp; &nbsp;one -----&gt; 用来控制 结算按钮的样式(当选中的其中任何一条购物车条目时候,显示橘色,当没有任何一条选中,显示灰色)</li>
<li>&nbsp; &nbsp; &nbsp; &nbsp;sumcount ----&gt;&nbsp; 用来显示购物车的总数量,显示在页面中</li>
</ul>
<p>&nbsp;</p>
<p>  2、单选框的实现</p>
<p>  1)首先是渲染的都是同样的样式,所以在这里传递一个index特别关键,通过index的传递才能够知道操作的是哪条</p>
<p>  2)当onchange事件发生的时候,对当前checked属性进行取反。list.checked = ! list.checked。</p>
<p>  3)单选框决定全选框:使用了数组的every方法(只有数组的每一项都满足条件,才会返回true),用所有datalist的单选框都是true的时候,全选按钮才会为true</p>
<p>  4)单选框的选中与否决定结算框的样式:one : list.checked // 为true的时候,one : true&nbsp;</p>
<div class="cnblogs_code">
<div>
<div>   &lt;input&nbsp;type="checkbox"&nbsp;className={style.checkbtn+'&nbsp;'+style.UnChecked}&nbsp;&nbsp;ref="mytext"</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;onChange={()=&gt;{this.handleChange(index)}}&nbsp;checked={item.checked}&nbsp;value=""</div>
<div>&nbsp; &nbsp; &nbsp;/&gt;</div>
</div>
<pre> <br><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 单选</span>
<span style="color: rgba(0, 0, 0, 1)">    handleChange(index){
     
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      list.checked </span>= !<span style="color: rgba(0, 0, 0, 1)">list.checked
      
      // <span style="color: rgba(0, 128, 0, 1)">every方法
      </span></span><span style="color: rgba(0, 0, 255, 1)">var</span> every=list.every((item,index)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> item.checked==<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
      })

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 单选框中如果有一个是 checked的是true就可以</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> some = list.some((item,index)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list.checked
      })
      
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist :list,
            all : every, //<span style="color: rgba(0, 128, 0, 1)">全选按钮,只有当所有的list=== true 的时候才会返回true</span>
            one : some</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设定结算框的样式是哪个,根据list.checked</span>
<span style="color: rgba(0, 0, 0, 1)">      })
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()

    }</span></pre>
</div>
<p>&nbsp;</p>
<p>    3、全选按钮的实现</p>
<p>    1)当点击全选框,对全选框的状态进行取反</p>
<p>    2)点击全选按钮的时候,所有的单选框的为true / false 直接取决的 全选框按钮当前的状态true / false&nbsp;</p>
<p>     遍历所有的list.checked = all , 把全选框的状态(true/false)直接赋值给所有的list.checked 。&nbsp;</p>
<p>    3)当全选的时候,结算框的样式直接会跟随变动,当为false,即没有一个购物车条目呗选中,此时结算框的状态为灰色。当为true,结算框为橘色。</p>
<div class="cnblogs_code">
<pre> &lt;input type="checkbox" onChange={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleAll()}} checked={<span style="color: rgba(0, 0, 255, 1)">this</span>.state.all} value=""/&gt;

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 全选</span>
<span style="color: rgba(0, 0, 0, 1)">    handleAll(){
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> all = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.all
      all </span>= !<span style="color: rgba(0, 0, 0, 1)"> all <span style="color: rgba(0, 128, 0, 1)">//onchange事件发生,就是对当前的状态进行取反
      </span></span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0 ; i &lt; list.length ;i++<span style="color: rgba(0, 0, 0, 1)">){
            list.checked </span>=<span style="color: rgba(0, 0, 0, 1)"> all <span style="color: rgba(0, 128, 0, 1)">// 全选框的状态直接影响所有的单选框,就把全选框的状态赋给所有的单选框即可</span>
      }      

      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            all : all,
            one : all </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全选的状态直接影响结算框的样式</span>
<span style="color: rgba(0, 0, 0, 1)">      })
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>    4、购物车数量加减的实现</p>
<p>    1)数量增加Add</p>
<p>    重要的还是传递对应的index,才能准确地知道操作的是哪个购物车条目&nbsp;</p>
<p>    list.count++</p>
<p>    2)数量减少Minus</p>
<p>    还有进行一步判断,当此时购物车的数量已经是1的时候,不允许再继续减了</p>
<p>    list.count--</p>
<p>    list.count&lt;1?1:list.count</p>
<p>    </p>
<div class="cnblogs_code">
<pre>&lt;button className={style.minus} onClick={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleMinus(index)}}&gt;-&lt;/button&gt;
&lt;input type="text" value={<span style="color: rgba(0, 0, 255, 1)">this</span>.state.datalist.count||''}/&gt;
&lt;button className={style.add} onClick={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleAdd(index)}}&gt;+&lt;/button&gt;


<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 加</span>
<span style="color: rgba(0, 0, 0, 1)">handleAdd(index){
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定的value= {this.state.datalist.count}</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      list.count</span>++<span style="color: rgba(0, 0, 0, 1)">;
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist : list,
      })
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
      
    }

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">减</span>
<span style="color: rgba(0, 0, 0, 1)">    handleMinus(index){
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定的value= {this.state.datalist.count}</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist];
      list.count</span>--<span style="color: rgba(0, 0, 0, 1)">
      list.count</span>=list.count&lt;1?1<span style="color: rgba(0, 0, 0, 1)">:list.count;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist : list
      })

      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>    5、总价的实现</p>
<p>  1)遍历所有的datalist,只有当其中每一个checked属性为true的时候(表明已经被勾选上了,此时可以计算),才去计算金额</p>
<p>  2)得到所有的总价,还能得到当前选中的数量一共有多少</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">SumPrice(){
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> sum=0
      <span style="color: rgba(0, 0, 255, 1)">var</span> count = 0<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i =0; i&lt; list.length ;i++<span style="color: rgba(0, 0, 0, 1)">){
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>(list.checked=== <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
                sum </span>+= list.newprice *<span style="color: rgba(0, 0, 0, 1)">list.count
                count </span>+=<span style="color: rgba(0, 0, 0, 1)"> list.count
            }
      }
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            sumprice : sum,
            sumcount : count </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结算个数</span>
<span style="color: rgba(0, 0, 0, 1)">      })
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>    6、当进行 数量 的增加、减少、单选按钮、全选按钮的时候 都要重新调用计算总价的函数。</p>
<p>   ============================================================================= </p>
<p>  完整代码:</p>
<p>JS &gt;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">class CartPage extends Component {
    state </span>=<span style="color: rgba(0, 0, 0, 1)"> {
      datalist:[
            {
                </span>"imgUrl":"https://wochu.oss-cn-hangzhou.aliyuncs.com/upload/c8db2f99-d79e-4c4a-97e8-3e95c67a3b2e.jpg"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"name": "小青菜350g"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"newprice" : "4.5"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"oldprice" : "4.9"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"checked" :<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                </span>"count" :1<span style="color: rgba(0, 0, 0, 1)">
            },
      
            {
                </span>"imgUrl":"https://img.wochu.cn/upload/abbc6852-711f-4d09-8e61-216c13505ccd.jpg"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"name": "洪湖渔家香辣大闸蟹500g"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"newprice" : "15.9"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"oldprice" : "39.9"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"checked" :<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                </span>"count" :1<span style="color: rgba(0, 0, 0, 1)">
      
            },
            {
                </span>"imgUrl":"https://wochu.oss-cn-hangzhou.aliyuncs.com/upload/c8db2f99-d79e-4c4a-97e8-3e95c67a3b2e.jpg"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"name": "小青菜350g"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"newprice" : "4.5"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"oldprice" : "4.9"<span style="color: rgba(0, 0, 0, 1)">,
                </span>"checked" :<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                </span>"count" :1<span style="color: rgba(0, 0, 0, 1)">
      
            },
      ],
      all : </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      sumprice :</span>0<span style="color: rgba(0, 0, 0, 1)">,
      one : </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      sumcount:</span>0<span style="color: rgba(0, 0, 0, 1)">
    }

    render() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
            </span>&lt;div className={style.cartList}&gt;
                &lt;div className={style.cartListItem}&gt;
                  &lt;ul className={style.shopList} ref="myul"&gt;<span style="color: rgba(0, 0, 0, 1)">
                        {</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 对应的每个购物车条目 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                        {
                            </span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.datalist.map((item,index)=&gt;
                              
                            &lt;li key={index}&gt;
                            &lt;input type="checkbox" className={style.checkbtn+' '+style.UnChecked}ref="mytext"<span style="color: rgba(0, 0, 0, 1)">
                            onChange</span>={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleChange(index)}} checked={item.checked} value=""
                            /&gt;
                            &lt;div className={style.shopImg}&gt;<span style="color: rgba(0, 0, 0, 1)">
                              {</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 点击图片跳转到页面详情 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                              </span>&lt;div className={style.shopImgShow}&gt;
                                    &lt;img src={item.imgUrl} alt=""/&gt;
                              &lt;/div&gt;
                            &lt;/div&gt;
                            {<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 商品详情 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                            </span>&lt;div className={style.shopInfo}&gt;
                              &lt;div className={style.shopTitle}&gt;{item.name}&lt;/div&gt;
                              &lt;div className={style.shopCoupen}&gt;&lt;/div&gt;
                              &lt;div className={style.shopPrice}&gt;
                                    &lt;div className={style.price}&gt;
                                        &lt;span&gt;¥{item.newprice}&lt;/span&gt;
                                        &lt;i&gt;¥{item.oldprice}&lt;/i&gt;
                                    &lt;/div&gt;
                                    &lt;div className={style.shopSelect}&gt;
                                        &lt;button className={style.minus} onClick={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleMinus(index)}}&gt;-&lt;/button&gt;
                                        &lt;input type="text" value={<span style="color: rgba(0, 0, 255, 1)">this</span>.state.datalist.count||''}/&gt;
                                        &lt;button className={style.add} onClick={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleAdd(index)}}&gt;+&lt;/button&gt;
                                    &lt;/div&gt;
                              &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/li&gt;
<span style="color: rgba(0, 0, 0, 1)">                            )
                        }
                        
                  </span>&lt;/ul&gt;
                &lt;/div&gt;

                &lt;div className={style.sum}&gt;
                  &lt;input type="checkbox" onChange={()=&gt;{<span style="color: rgba(0, 0, 255, 1)">this</span>.handleAll()}} checked={<span style="color: rgba(0, 0, 255, 1)">this</span>.state.all} value=""/&gt;
                  &lt;div className={style.checkPrice}&gt;<span style="color: rgba(0, 0, 0, 1)">
                        {</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 合算 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                        </span>&lt;div className={style.totalPrice}&gt;
                            &lt;span className={style.allsum}&gt;合计&lt;/span&gt;
                            &lt;span&gt;¥{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.sumprice}&lt;/span&gt;
                        &lt;/div&gt;
                        {<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 不含运费 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                        </span>&lt;div className={style.fee}&gt;(不含运费)&lt;/div&gt;
                  &lt;/div&gt;
<span style="color: rgba(0, 0, 0, 1)">
                        {</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 结算按钮 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">}
                        </span>&lt;div className={<span style="color: rgba(0, 0, 255, 1)">this</span>.state.one?style.btnCheck:style.btnNoCheck}&gt;<span style="color: rgba(0, 0, 0, 1)">结算
                        </span>&lt;span&gt;({<span style="color: rgba(0, 0, 255, 1)">this</span>.state.sumcount})&lt;/span&gt;
                        &lt;/div&gt;
                &lt;/div&gt;
               
            &lt;/div&gt;
<span style="color: rgba(0, 0, 0, 1)">      );
    }


    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 单选</span>
<span style="color: rgba(0, 0, 0, 1)">    handleChange(index){

      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      list.checked </span>= !<span style="color: rgba(0, 0, 0, 1)">list.checked
      
      
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> every=list.every((item,index)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> item.checked==<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
      })

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 单选框中如果有一个是 checked的是true就可以</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> some = list.some((item,index)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list.checked
      })
      
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist :list,
            all : every,
            one : some</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设定结算框的样式是哪个,根据list.checked</span>
<span style="color: rgba(0, 0, 0, 1)">      })
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()

    }

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 全选</span>
<span style="color: rgba(0, 0, 0, 1)">    handleAll(){
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> all = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.all
      all </span>= !<span style="color: rgba(0, 0, 0, 1)"> all
      </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0 ; i &lt; list.length ;i++<span style="color: rgba(0, 0, 0, 1)">){
            list.checked </span>=<span style="color: rgba(0, 0, 0, 1)"> all
      }      

      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            all : all,
            one : all </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全选的状态直接影响结算框的样式</span>
<span style="color: rgba(0, 0, 0, 1)">      })
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
    }


    handleAdd(index){
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定的value= {this.state.datalist.count}</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      list.count</span>++<span style="color: rgba(0, 0, 0, 1)">;
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist : list,
      })
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
      
    }

    handleMinus(index){
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设定的value= {this.state.datalist.count}</span>
      <span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist];
      list.count</span>--<span style="color: rgba(0, 0, 0, 1)">
      list.count</span>=list.count&lt;1?1<span style="color: rgba(0, 0, 0, 1)">:list.count;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            datalist : list
      })

      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.SumPrice()
    }

    SumPrice(){
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> sum=0
      <span style="color: rgba(0, 0, 255, 1)">var</span> count = 0<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> list = [...<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.datalist]
      </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i =0; i&lt; list.length ;i++<span style="color: rgba(0, 0, 0, 1)">){
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>(list.checked=== <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
                sum </span>+= list.newprice *<span style="color: rgba(0, 0, 0, 1)">list.count
                count </span>+=<span style="color: rgba(0, 0, 0, 1)"> list.count
            }
      }
      
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            sumprice : sum,
            sumcount : count </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结算个数</span>
<span style="color: rgba(0, 0, 0, 1)">      })
    }


   
   
   
}


export </span><span style="color: rgba(0, 0, 255, 1)">default</span> CartPage;</pre>
</div>
<p>&nbsp;</p>
<p>CSS &gt;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.cartList</span>{<span style="color: rgba(255, 0, 0, 1)">
    background</span>:<span style="color: rgba(0, 0, 255, 1)">#f4f5f7</span>;<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    top</span>:<span style="color: rgba(0, 0, 255, 1)">.99rem</span>;<span style="color: rgba(255, 0, 0, 1)">
    .cartListItem{
      width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      background</span>:<span style="color: rgba(0, 0, 255, 1)">#fff</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-bottom</span>:<span style="color: rgba(0, 0, 255, 1)">.04rem</span>;<span style="color: rgba(255, 0, 0, 1)">

      // 购物车列表
      .shopList{
            width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
            // height</span>:<span style="color: rgba(0, 0, 255, 1)">1.11rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            padding</span>:<span style="color: rgba(0, 0, 255, 1)">0 .09rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            background</span>:<span style="color: rgba(0, 0, 255, 1)">#fff</span>;<span style="color: rgba(255, 0, 0, 1)">
            li{
                width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
                height</span>:<span style="color: rgba(0, 0, 255, 1)">1.11rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                border-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 1px solid #e6e6e6</span>;<span style="color: rgba(255, 0, 0, 1)">
                background</span>:<span style="color: rgba(0, 0, 255, 1)"> #fff</span>;<span style="color: rgba(255, 0, 0, 1)">
                // 选中按钮
                .checkbtn{
                  width</span>:<span style="color: rgba(0, 0, 255, 1)">.17rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  height</span>:<span style="color: rgba(0, 0, 255, 1)">1.11rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;
                }<span style="color: rgba(128, 0, 0, 1)">

                // 选中时候的类名
                .UnChecked</span>{<span style="color: rgba(255, 0, 0, 1)">
                  background</span>:<span style="color: rgba(0, 0, 255, 1)">url("../../../image/cart-img/unselect.png") no-repeat</span>;<span style="color: rgba(255, 0, 0, 1)">
                  background-size</span>:<span style="color: rgba(0, 0, 255, 1)">100% .25rem</span>;
                }<span style="color: rgba(128, 0, 0, 1)">

                // 点击图片跳转
                .shopImg</span>{<span style="color: rgba(255, 0, 0, 1)">
                  width</span>:<span style="color: rgba(0, 0, 255, 1)">1.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  height</span>:<span style="color: rgba(0, 0, 255, 1)">1.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  margin</span>:<span style="color: rgba(0, 0, 255, 1)">0 .1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                  .shopImgShow{
                        width</span>:<span style="color: rgba(0, 0, 255, 1)">1.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        height</span>:<span style="color: rgba(0, 0, 255, 1)">1.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        img{
                            width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;
                        }<span style="color: rgba(128, 0, 0, 1)">
                  }
                }
                // 购物车商品详情
                .shopInfo</span>{<span style="color: rgba(255, 0, 0, 1)">
                  width</span>:<span style="color: rgba(0, 0, 255, 1)">2.08rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  height</span>:<span style="color: rgba(0, 0, 255, 1)">1.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                  padding</span>:<span style="color: rgba(0, 0, 255, 1)">.1rem 0</span>;<span style="color: rgba(255, 0, 0, 1)">
                  float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                  .shopTitle{
                        width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
                        overflow</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;<span style="color: rgba(255, 0, 0, 1)">
                        white-space</span>:<span style="color: rgba(0, 0, 255, 1)"> nowrap</span>;<span style="color: rgba(255, 0, 0, 1)">
                        text-overflow</span>:<span style="color: rgba(0, 0, 255, 1)"> ellipsis</span>;<span style="color: rgba(255, 0, 0, 1)">
                        height</span>:<span style="color: rgba(0, 0, 255, 1)">.3rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.14rem</span>;
                  }<span style="color: rgba(128, 0, 0, 1)">
                  .shopCoupen</span>{<span style="color: rgba(255, 0, 0, 1)">
                        width</span>:<span style="color: rgba(0, 0, 255, 1)">2.08rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        height</span>:<span style="color: rgba(0, 0, 255, 1)">.12rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        margin</span>:<span style="color: rgba(0, 0, 255, 1)">.1rem 0</span>;
                  }<span style="color: rgba(128, 0, 0, 1)">
                  .shopPrice</span>{<span style="color: rgba(255, 0, 0, 1)">
                        width</span>:<span style="color: rgba(0, 0, 255, 1)">2.08rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        height</span>:<span style="color: rgba(0, 0, 255, 1)">.25rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                        //价格
                        .price{
                            width</span>:<span style="color: rgba(0, 0, 255, 1)">1.08rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                            height</span>:<span style="color: rgba(0, 0, 255, 1)">.21rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                            float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                            span{
                              font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.15rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              color</span>:<span style="color: rgba(0, 0, 255, 1)">#f96d16</span>;
                            }<span style="color: rgba(128, 0, 0, 1)">
                            i</span>{<span style="color: rgba(255, 0, 0, 1)">
                              font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.13rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              color</span>:<span style="color: rgba(0, 0, 255, 1)">#999</span>;<span style="color: rgba(255, 0, 0, 1)">
                              text-decoration</span>:<span style="color: rgba(0, 0, 255, 1)"> line-through</span>;<span style="color: rgba(255, 0, 0, 1)">
                              font-style</span>:<span style="color: rgba(0, 0, 255, 1)">normal</span>;
                            }<span style="color: rgba(128, 0, 0, 1)">
                        }

                        // 按钮
                        .shopSelect</span>{<span style="color: rgba(255, 0, 0, 1)">
                            float</span>:<span style="color: rgba(0, 0, 255, 1)">right</span>;<span style="color: rgba(255, 0, 0, 1)">
                            width</span>:<span style="color: rgba(0, 0, 255, 1)">.775rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                            height</span>:<span style="color: rgba(0, 0, 255, 1)">.25rem</span>;<span style="color: rgba(255, 0, 0, 1)">

                            .minus{
                              float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                              width</span>:<span style="color: rgba(0, 0, 255, 1)">.225rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              height</span>:<span style="color: rgba(0, 0, 255, 1)">.25rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              border</span>:<span style="color: rgba(0, 0, 255, 1)">0</span>;
                            }<span style="color: rgba(128, 0, 0, 1)">
                            input</span>{<span style="color: rgba(255, 0, 0, 1)">
                              float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                              width</span>:<span style="color: rgba(0, 0, 255, 1)">.325rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              height</span>:<span style="color: rgba(0, 0, 255, 1)">.25rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
                              border</span>:<span style="color: rgba(0, 0, 255, 1)">0</span>;
                            }<span style="color: rgba(128, 0, 0, 1)">
                            .add</span>{<span style="color: rgba(255, 0, 0, 1)">
                              float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
                              width</span>:<span style="color: rgba(0, 0, 255, 1)">.225rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              height</span>:<span style="color: rgba(0, 0, 255, 1)">.25rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                              border</span>:<span style="color: rgba(0, 0, 255, 1)">0</span>;
                            }<span style="color: rgba(128, 0, 0, 1)">
                        }
                  }
                }
            }
      }
    }

   
    // 合算
div.sum</span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    height</span>:<span style="color: rgba(0, 0, 255, 1)">.5rem</span>;<span style="color: rgba(255, 0, 0, 1)">
    background</span>:<span style="color: rgba(0, 0, 255, 1)">#fff</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding-left</span>:<span style="color: rgba(0, 0, 255, 1)">.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)">fixed</span>;<span style="color: rgba(255, 0, 0, 1)">
    bottom</span>:<span style="color: rgba(0, 0, 255, 1)">.5rem</span>;<span style="color: rgba(255, 0, 0, 1)">
    left</span>:<span style="color: rgba(0, 0, 255, 1)">0</span>;<span style="color: rgba(255, 0, 0, 1)">

    input{
      height</span>:<span style="color: rgba(0, 0, 255, 1)">100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .checkPrice</span>{<span style="color: rgba(255, 0, 0, 1)">
      float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)">1.48rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)">.41rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> .41rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      padding</span>:<span style="color: rgba(0, 0, 255, 1)">.08rem 0</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-left</span>:<span style="color: rgba(0, 0, 255, 1)">.1rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      // 合计
      .totalPrice{
            float</span>:<span style="color: rgba(0, 0, 255, 1)"> left</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)">.869rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            height</span>:<span style="color: rgba(0, 0, 255, 1)">.36rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            line-height</span>:<span style="color: rgba(0, 0, 255, 1)">.36rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.16rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            color</span>:<span style="color: rgba(0, 0, 255, 1)">#f96d16</span>;<span style="color: rgba(255, 0, 0, 1)">
            .allsum{
                font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.13rem</span>;<span style="color: rgba(255, 0, 0, 1)">
                color</span>:<span style="color: rgba(0, 0, 255, 1)">#333</span>;
            }<span style="color: rgba(128, 0, 0, 1)">
      }

      // 不含运费
      .fee</span>{<span style="color: rgba(255, 0, 0, 1)">
            float</span>:<span style="color: rgba(0, 0, 255, 1)">left</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)">.61rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.13rem</span>;<span style="color: rgba(255, 0, 0, 1)">
            color</span>:<span style="color: rgba(0, 0, 255, 1)">#999</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }

    // 结算按钮
    .btnCheck</span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)">1.15rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)">.49rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      background</span>:<span style="color: rgba(0, 0, 255, 1)">rgb(249, 109, 22)</span>;<span style="color: rgba(255, 0, 0, 1)">
      float</span>:<span style="color: rgba(0, 0, 255, 1)">right</span>;<span style="color: rgba(255, 0, 0, 1)">
      line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> .49rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.18rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)">#fff</span>;<span style="color: rgba(255, 0, 0, 1)">
      text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .btnNoCheck</span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)">1.15rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)">.49rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      background</span>:<span style="color: rgba(0, 0, 255, 1)">rgb(153, 153, 153)</span>;<span style="color: rgba(255, 0, 0, 1)">
      float</span>:<span style="color: rgba(0, 0, 255, 1)">right</span>;<span style="color: rgba(255, 0, 0, 1)">
      line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> .49rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)">.18rem</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)">#fff</span>;<span style="color: rgba(255, 0, 0, 1)">
      text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}

}</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/rabbit-lin0903/p/11603084.html
頁: [1]
查看完整版本: React == 实现简易购物车