1. 程式人生 > >【React】React實現手風琴效果

【React】React實現手風琴效果

需求背景

效果圖:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
由於不確定手風琴的個數,所以無法通過一個全域性的state.hidden屬性統一設定。

有兩種解決方法:
1. 陣列的方式
2. 建立索引值查詢(本文所使用的方法)

import React, { Component } from 'react';
import styles from './List.css';

import { connect } from 'react-redux';
import { loadList } from '../../actions';

@connect(
    (state, ownProps) =>
{ const selectedMenu = ownProps.location.hash.split('#')[1]; //獲取URL中的hash值 return { selectedMenu, } }, { loadList } ) class List extends Component { constructor(props) { super(props); this.renderSection = this.renderSection.bind(this); } //
控制是否展開二級標題 handleSubTitleShow = (evt) => { const node = evt.currentTarget; const idx = node.dataset.idx; const { history, location, selectedMenu } = this.props; //如果雙擊一級標題,清空hash值,收起當前的二級標題。否則認為是單擊,展開二級標題 if (selectedMenu === idx) { history.replace({ ...location, hash
: '', }); } else { history.replace({ ...location, hash: idx, }); } } //二級標題 renderSectionRow(item, idx) { const { name } = item; return ( <div className={styles.sectionContentRow} key={`secRow${idx}`}>Q{idx+1}:{name}</div> ); } //一級標題 renderSection(item, idx) { const key = '' + idx; //由於從URL獲取的hash值是字串,所以把idx也改為字串,方便後面做對比 const { selectedMenu } = this.props; const { name, articleVoList } = item; return ( <div className={styles.section} key={key}> <a data-idx={key} className={styles.secTitle} onClick={this.handleSubTitleShow}> <span>{name}</span> <span className={selectedMenu === key ? styles.secTitleIconCurrent : styles.secTitleIcon}> </span> </a> {selectedMenu === key && articleVoList.map(this.renderSectionRow)} </div> ); } render() { const { list } = this.props; if (!list) { return null; } return ( <div className={styles.wrapper}> {list.map(this.renderSection)} </div> ); } } export default List;

Author:致知
Sign:路漫漫其修遠兮,吾將上下而求索。

相關推薦

HTML5Canvas 實現放大鏡效果

圖片放大鏡 效果 線上演示    原始碼 原理 首先選擇圖片的一塊區域,然後將這塊區域放大,然後再繪製到原先的圖片上,保證兩塊區域的中心點一致, 如下圖所示: 初始化 <canvas id="canvas" widt

ReactReact實現手風琴效果

需求背景 效果圖: 由於不確定手風琴的個數,所以無法通過一個全域性的state.hidden屬性統一設定。 有兩種解決方法: 1. 陣列的方式 2. 建立索引值查詢(本文所使用的方法) import React, { Compo

reactreact實現類似vue的雙向資料繫結

import React from 'react' import ReactDOM from 'react-dom' class Comment extends React.Component { constructor() { sup

03react 之創建component

更強 系列 生命周期 object mem efi 多余 element edi React推出後,出於不同的原因先後出現三種定義react組件的方式,殊途同歸;具體的三種方式: 函數式定義的無狀態組件 es5原生方式React.createClass定義的組件 es6形

06react 之 PropsType

nod document 元素 pre ace ont 道具 def reat React組件創建的時候,需要傳入屬性,我們可以使用使用PropTypes進行類型檢查,您可以使用React.PropTypes在組件的道具上運行。 React.PropTypes.array

07react 之 生命周期

led render cti dup 一些事 復制代碼 pop 狀態機 document 閱讀目錄(Content) 實例化 getDefaultProps getInitialState componentWillMount render componentDidM

09react 之 表單組件

密碼 愛好 你在 false create 保留 input 數據 編寫 不太清楚有多少初學React的同學和博主當時一樣,在看完React的生命周期、數據流之後覺得已經上手了,甩開文檔啪啪啪的開始敲了起來。結果...居然被一個input標簽給教做人了。 故事是這樣的

11react 之 flux

ntb var 發生 tor 回調函數 1.3 執行流程 下回 關聯 Flux 是 Facebook 使用的一套前端應用的架構模式。React 標榜自己是 MVC 裏面 V 的部分,那麽 Flux 就相當於添加 M 和 C 的部分。 1.1. Flux介紹 Flux並不是

前端react學習階段總結,學習reactreact-router與redux的這些事兒

行程 clas 目前 webpack body src 控制 return 體驗 前言   借用阮一峰的一句話:真正學會 React 是一個漫長的過程。 這句話在我接觸react深入以後,更有感觸了。整個react體系都是全新的,最初做簡單的應用,僅僅使用react-to

前端javascript實現導航欄筋鬥雲效果特效

超時 out die ron 滑動 scrip mouseover none point 實現效果:   實現效果如下圖所示 實現原理: 什麽是筋鬥雲效果: 這個效果很簡單,就是鼠標移到其他導航目錄時會有背景圖片跟著鼠標滑動到當前的目錄。 實現思路: 鼠標經過的時候

reactreact學習筆記

教程 內部 意思 one docs 分享 log 標識 dom 1.jsx {}中支持三元表達式,不支持if else,用&&效果和if else一樣 2.樣式支持內聯樣式,駝峰式命名 3.允許插入數組,模板自動展開 4.事件 o

React----react-redux

sta react tor com 重復 s函數 函數 圖片 當前 轉載於https://www.cnblogs.com/nanianqiming/p/9879596.html 1、react-redux 是一個第三方插件使我們在react上更方便的來使用redux這個數據

記錄react警告:Warning: Encountered two children with the same key解決辦法

問題: 在做前端專案時使用react+ant design使用<Select>標籤出現警告如下: Warning: Encountered two children with the same key, `.$高峰出車率`. Keys should be un

分類 - React Native

專欄達人 授予成功建立個人部落格專欄

一起來學ReactReact-Router學習

在web下我們一般都使用react-router-dom,相比於react-router多了一些DOM操作方法,你可以嘗試單獨安裝react-router-dom,看依賴包裡面是不是會包含了react-router,本文就記錄下react-router-dom一些筆記(文章中ap

一起來學React- React基礎知識補充(列表渲染、條件渲染、JSX語法)

本章節為react基礎知識的補充,我今天看了一下,發現react的基礎知識大致能通過我之前的幾張來講解的差不多了,但是不夠細,還有一些,只講了一個概念,所以這一章節來進行一個補充吧! 列表渲染 react的列表渲染不和vue或者ng一樣,有指令的,react完全靠j

一起來學React- React父子元件通訊

React間父子元件通訊,非常簡單,如果你有點基礎,基本上是一看就明白了 本文為系列文章首發於我的部落格:https://www.fakin.cn 1、父子元件通訊 如果你會vue,那麼你就應該知道,vue是通過props給子元件傳遞引數進行通訊。而React也是通

翻譯React vs Angular- JavaScript的雙向性

  翻譯原文連結:https://blog.prototypr.io/react-vs-angular-two-sides-of-javascript-b850de22b413   我的翻譯小站:http://www.zcfy.cc/article/3573   在世界末日

ReactReact+Redux+Ajax 點餐專案 完整流程

Github 地址: https://github.com/KnoveZ/react-demo-knove 前端:React框架(Redux) 後端:SSM框架(Redis+ActiveMQ+Web

React 常用面試題目與分析

作者:王下邀月熊 連結:https://zhuanlan.zhihu.com/p/24856035 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 呼叫 setState 之後發生了什麼? 在程式碼中呼叫setState函式之後,React 會將傳入的引數物件與元件當前的狀態