主頁 > 企業開發 > React 全家桶-React基礎

React 全家桶-React基礎

2022-11-07 07:59:15 企業開發

React 全家桶-React基礎

用于構建用戶界面的JavaScript庫

facebook開源組件化宣告式編碼React Native移動端開發虛擬DOM+Diffing演算法

官網:https://react.docschina.org/

第一章:React的基本使用

1.相關js庫

  • react.js:React核心庫
  • React-dom.js:提供操作DOM的react擴展庫
  • Babel.min.js:決議JSX語法代碼轉為JS代碼的庫
    • ES6轉ES5

2.創建虛擬DOM的兩種方式

  • JSX
  • JS

3.JSX

React定義的一種類似于XML的JS擴展語法:JS + XML

它最終產生的結果不是字串,也不是HTML/XML標簽,而是一個JS物件

語法規則:

  • 標簽中混入JS運算式要用{}

    • 運算式:一個運算式會回傳一個值,而代碼塊不一定有值回傳

  • 樣式的類名指定不要用class屬性名,用className

  • 行內樣式,要用style={{key: value}}的形式去寫

  • 只能有一個根標簽

  • 標簽必須閉合

  • JSX標簽轉換規則

    • 若小寫字母開頭,則將該標簽轉換為html中同名元素,若html中無該標簽對應的同名元素,則報錯
    • 若大寫開頭,則渲染對應的組件,若組件未曾定義,則報錯

4.模塊化與組件化

模塊:向外提供特定功能的js程式,一般是一個js檔案

組件:實作區域功能效果的代碼和資源的集合

第二章:React面向組件編程

1.基本理解和使用

1.1 React開發者工具

React Developer Tools 瀏覽器插件

1.2 效果

函式式組件

<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script type="text/babel">
        // 1. 創建函式式組件
        function Demo () {
            console.log(this) // 此處的this是undefined,因為babel編譯后開啟了嚴格模式
            return <h2>用函式定義的組件</h2>
        }

        // 2. 渲染組件到頁面
        ReactDOM.render(<Demo/>, document.getElementById('ctx'))
        /*
            渲染步驟:
            1. React決議組件標簽,找到了了Demo組件
            2. 發現組件是使用函式定義的,隨后呼叫該函式,將回傳的虛擬DOM轉為真實DOM,隨后呈現在頁面上
        */
    </script>    
</body>

類式組件

<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script type="text/babel">
        // 1. 創建類式組件
        class MyComponent extends React.Component {
            render () {
                console.log(this)
                return <h2>用類定義的組件,適用于復雜組件的定義</h2>
            }
        }
        ReactDOM.render(<MyComponent/>, document.getElementById('ctx'))
        /*
            渲染步驟:
            1. React決議組件標簽,找到了了 MyComponent 組件
            2. 發現組件是使用類定義的,隨后new出該類的實體,并通過該實體呼叫原型上的render方法,將回傳的虛擬DOM轉為真實DOM,隨后呈現在頁面上
        */
    </script>    
</body>

2.組件三大核心屬性

2.1 state

<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script type="text/babel">
        class Weather extends React.Component {
            state = {
                isHot: false
            }
            render () {
                const {isHot} = this.state
                return <h2 onClick={this.changeWeather}>天氣:{isHot ? '熱' : '涼' },風速:{isHot ? '一級' : '二級' }</h2>
            }
            // 自定義方法,要用賦值陳述句+箭頭函式(箭頭函式沒有自己的this)
            changeWeather = () => {
                this.state.isHot = !this.state.isHot
                this.setState(this.state)
            }
        }
        ReactDOM.render(<Weather/>, document.getElementById('ctx'))
    </script>    
</body>

2.2 props

類式組件使用props
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Person extends React.Component {

            // 構造器是否接收props,是否傳遞給super?問題取決于:是否希望在構造器中通過this訪問props
            constructor(props) {
                super(props)
                console.log('c', this.props)
            }

            // 對標簽屬性進行型別、必要性的限制
            static propTypes = {
                name: PropTypes.string.isRequired
            }
            
            // 指定默認值
            static defaultProps = {
                sex: '未知'
            }

            render () {
                const {name, age, sex} = this.props
                return (
                    <ul>
                        <li>姓名:{name}</li>    
                        <li>性別:{sex}</li>    
                        <li>年齡:{age}</li>    
                    </ul>
                )
            }
        }
        
        
        const p = {name: '逾期', age: 18, sex: '女'}
        ReactDOM.render(<Person {...p}/>, document.getElementById('ctx'))
    </script>    
</body>
函式式組件使用props
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        
        function Person (props) {
            const {name, sex, age} = props
            return (
                    <ul>
                        <li>姓名:{name}</li>    
                        <li>性別:{sex}</li>    
                        <li>年齡:{age}</li>    
                    </ul>
                )
        }

        // 對標簽屬性進行型別、必要性的限制
        Person.propTypes = {
            name: PropTypes.string.isRequired
        }
        
        // 指定默認值
        Person.defaultProps = {
            sex: '未知'
        }
        
        const p = {name: '逾期', age: 18, sex: '女'}
        ReactDOM.render(<Person {...p}/>, document.getElementById('ctx'))
    </script>    
</body>

2.3 refs與事件處理

組件內的標簽可以定義ref屬性來標識自己

2.3.1 字串形式的refs
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            showData = https://www.cnblogs.com/bwqueen/archive/2022/11/06/() => {
                const {input1} = this.refs
                alert(input1.value)
            }
            showData2 = () => {
                const {input2} = this.refs
                alert(input2.value)
            }
            render() {
                return (
                    
2.3.2 回呼函式形式的refs
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            showData = https://www.cnblogs.com/bwqueen/archive/2022/11/06/() => {
                const {input1} = this
                alert(input1.value)
            }
            showData2 = () => {
                const {input2} = this
                alert(input2.value)
            }
            render() {
                return (
                    
this.input1 = c} type="text" placeholder="點擊按鈕提示資料"/> <button onClick={this.showData}>點我提示左側資料</button> <input onBlur={this.showData2} ref={c => this.input2 = c} type="text" placeholder="失去焦點提示資料"/> </div> ) } } ReactDOM.render(<Demo/>, document.getElementById('ctx')) </script> </body>
2.3.3 createRef
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            myRef = React.createRef()
            showData = https://www.cnblogs.com/bwqueen/archive/2022/11/06/() => {
                console.log(this.myRef)
                alert(this.myRef.current.value)
            }
            render() {
                return (
                    
2.3.4 事件處理

image-20221020005016547

2.4 收集表單資料

2.4.1 受控組件
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            state = {
                username: '',
                password: ''
            }
            saveUsername = (e) => {
                this.setState({username: e.target.value})
            }
            savePassword = (e) => {
                this.setState({password: e.target.value})
            }
            handleSubmit = (e) => {
                e.preventDefault() // 阻止form表單提交事件
                const {username, password} = this.state
                alert(`username: ${username.value}, password: ${password.value}`)
            }
            render() {
                return (
                    <form onSubmit={this.handleSubmit}>
                        用戶名:<input onChange={this.saveUsername} type="text" name="username"/>
                        密  碼:<input onChange={this.savePassword} type="text" placeholder="password"/>
                        <button>login</button>
                    </form>
                )
            }
        }
        ReactDOM.render(<Demo/>, document.getElementById('ctx'))
    </script>    
</body>
2.4.2 非受控組件
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            handleSubmit = (e) => {
                e.preventDefault() // 阻止form表單提交事件
                const {username, password} = this
                alert(`username: ${username.value}, password: ${password.value}`)
            }
            render() {
                return (
                    <form onSubmit={this.handleSubmit}>
                        用戶名:<input ref={c => this.username = c} type="text" name="username"/>
                        密  碼:<input ref={c => this.password = c} type="text" placeholder="password"/>
                        <button>login</button>
                    </form>
                )
            }
        }
        ReactDOM.render(<Demo/>, document.getElementById('ctx'))
    </script>    
</body>
2.4.3 函式的柯里化
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Demo extends React.Component {
            state = {
                username: '',
                password: ''
            }
        		/**
             * 高階函式:如果一個函式符合下面兩個規范中的任一,那該函式就是高階函式
             * 1. 若A函式接收的引數是一個函式,那么A就可以稱之為高階函式
             * 2. 若A函式呼叫的回傳值依然是一個函式,那么A就可以稱之為高階函式
             * 函式的柯里化:通過函式呼叫繼續回傳函式的方式,實作多次接收引數,最后統一處理的函式編碼形式
             */
            saveFormData = https://www.cnblogs.com/bwqueen/archive/2022/11/06/(dataType) => {
                return (e) => {
                    return this.setState({[dataType]: e.target.value})
                }
            }
            handleSubmit = (e) => {
                e.preventDefault() // 阻止form表單提交事件
                const {username, password} = this.state
                alert(`username: ${username.value}, password: ${password.value}`)
            }
            render() {
                return (
                    
用戶名:

2.5 組件生命周期

2.5.1 舊版生命周期
image-20221022113756797
<body>
    <div id="ctx"></div>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Count extends React.Component {

            constructor(props) {
                console.log('Count-constructor')
                super(props)
                this.state = {
                    count: 0
                }
            }
            add = () => {
                const {count} = this.state
                this.setState({
                    count: count+1
                })
            }
            death = () => {
                ReactDOM.unmountComponentAtNode(document.getElementById('ctx'))
            }
            force = () => {
                this.forceUpdate()
            }
            componentWillMount() {
                console.log('Count-componentWillMount')
            }
            componentDidMount() {
                console.log('Count-componentDidMount')
            }
            shouldComponentUpdate() {
                console.log('Count-shouldComponentUpdate')
                return false
            }
            componentWillUpdate() {
                console.log('Count-componentWillUpdate')
            }
            componentDidUpdate() {
                console.log('Count-componentDidUpdate')
            }
            componentWillUnmount() {
                console.log('Count-componentWillUnmount')
            }
            
            render() {
                console.log('Count-render')
                const {count} = this.state
                return (
                    <div>
                        <h2>當前求和為: {count}</h2>
                        <button onClick={this.add}>點我+1</button>
                        <button onClick={this.death}>卸載組件</button>
                        <button onClick={this.force}>強制更新</button>
                    </div>
                )
            }
        }
        
        // 父組件A
        class A extends React.Component {
            state = {
                carName: '奔馳'
            }
            changeCar = () => {
                this.setState({carName: '奧迪'})
            }
            render() {
                return (
                    <div>
                        <div>A component</div>
                        <button onClick={this.changeCar}>換車</button>
                        <B carName={this.state.carName}/>
                    </div>
                )
            }
        }
        // 子組件B
        class B extends React.Component {
            // 第一次渲染不會呼叫這個鉤子
            componentWillReceiveProps(props) {
                console.log('B-componentWillReceiveProps', props)
            }
            render() {
                return (
                    <div>
                        <div>B component: carName={this.props.carName}</div>
                    </div>
                )
            }
        }
        // ReactDOM.render(<Count/>, document.getElementById('ctx'))
        ReactDOM.render(<A/>, document.getElementById('ctx'))
    </script>    
</body>
2.5.2 新版生命周期
image-20221023140121313
<body>
    <div id="ctx"></div>
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/newjs/react.development.js"></script>
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/newjs/react-dom.development.js"></script>
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/babel.min.js"></script>
    <!-- 引入prop-types,用于對組件標簽進行限制 -->
    <script src="https://www.cnblogs.com/bwqueen/archive/2022/11/js/prop-types.js" type="text/javascript"></script>
    <script type="text/babel">
        class Count extends React.Component {

            constructor(props) {
                console.log('Count-constructor')
                super(props)
                this.state = {
                    count: 0
                }
            }
            add = () => {
                const {count} = this.state
                this.setState({
                    count: count+1
                })
            }
            death = () => {
                ReactDOM.unmountComponentAtNode(document.getElementById('ctx'))
            }
            force = () => {
                this.forceUpdate()
            }
            // 在更新之前獲取快照,方法回傳值將會作為引數傳遞給componentDidUpdate鉤子
            getSnapshotBeforeUpdate () {
                console.log('getSnapshotBeforeUpdate')
                return 'liergou'
            }
            // getDerivedStateFromProps方法的回傳值會作為state的值
            static getDerivedStateFromProps (props, state) {
                console.log('getDeriverdStateFromProps', props, state)
                return null
            }
            componentDidMount() {
                console.log('Count-componentDidMount')
            }
            shouldComponentUpdate() {
                console.log('Count-shouldComponentUpdate')
                return true
            }
            componentDidUpdate(preProps, preState, snapshotValue) {
                console.log('Count-componentDidUpdate', preProps, preState, snapshotValue)
            }
            componentWillUnmount() {
                console.log('Count-componentWillUnmount')
            }
            
            render() {
                console.log('Count-render')
                const {count} = this.state
                return (
                    <div>
                        <h2>當前求和為: {count}</h2>
                        <button onClick={this.add}>點我+1</button>
                        <button onClick={this.death}>卸載組件</button>
                        <button onClick={this.force}>強制更新</button>
                    </div>
                )
            }
        }
        ReactDOM.render(<Count age={88}/>, document.getElementById('ctx'))
    </script>    
</body>

2.6 虛擬DOM與DOM Diff演算法

https://segmentfault.com/a/1190000012921279

第三章:React應用(基于React腳手架)

第四章:React ajax

第五章:React-router

第六章:React UI 組件庫

第七章:Redux

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528094.html

標籤:其他

上一篇:vue匯出word檔案

下一篇:js中的call,apply與bind

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more