前端学习案例-React Hooks『useState』实现

简介: 前端学习案例-React Hooks『useState』实现


第一步 安装环境

npm init -y

yarn add vite -D

第二步 演示usestate的功能

const {useState}=React
function App(){
    const [count,setCount]=useState(0)
    return (
        <div>
            <h1>{count}</h1>
            <button onClick={()=>setCount(count+1)}>+1</button>
        </div>
    )
}
ReactDOM.render(
    <App/>,
    document.querySelector("#app")
)

第三步 手动封装替代

const MyReact = (() => {
  let _state;
  function useState(initialState) {
    debugger
    _state = _state == undefined ? initialState : _state;
    return [_state, _setState];
  }
  const _setState = (newState) => {
    _state = newState;
    render();
  };
  return {
    useState,
  };
})();
function render() {
  ReactDOM.render(<App />, document.querySelector("#app"));
}
const { useState } = MyReact;
function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}
ReactDOM.render(<App />, document.querySelector("#app"));

实现-1操作

const { useState } = React;
function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={()=>setCount(count=> count - 1)}>-1</button>
    </div>
  );
}
ReactDOM.render(<App />, document.querySelector("#app"));

手动封装替代

const MyReact = (() => {
  let _state;
  function useState(initialState) {
    _state = _state == undefined ? initialState : _state;
    return [_state, _setState];
  }
  const _setState = (newState) => {
    if(typeof newState==="function"){
        _state=newState(_state)
    }else{
        _state = newState;
    }
    render();
  };
  return {
    useState,
  };
})();
function render() {
  ReactDOM.render(<App />, document.querySelector("#app"));
}
const { useState } = MyReact;
function App() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={()=>setCount(count=> count - 1)}>-1</button>
    </div>
  );
}
ReactDOM.render(<App />, document.querySelector("#app"));

实现判断操作

const { useState } = React;
function App() {
  const [count, setCount] = useState(0);
  const [flag, setFlag] = useState(false);
  return (
    <div>
      <h1>{count}</h1>
      <h1>{flag ? "打开状态" : "关闭状态"}</h1>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setCount((count) => count - 1)}>-1</button>
      <button onClick={() => setFlag((flag) => (flag = !flag))}>
        {flag ? "关闭" : "打开"}
      </button>
    </div>
  );
}
ReactDOM.render(<App />, document.querySelector("#app"));

手动封装

const MyReact = (() => {
  const states = [],
    stateSetters = [];
  var stateIndex = 0;
  function createState(initialState, stateIndex) {
    return states[stateIndex] !== undefined ? states[stateIndex] : initialState;
  }
  function createStateSetter(stateIndex) {
    return function (newState) {
      if (typeof newState === "function") {
        states[stateIndex] = newState(states[stateIndex]);
      } else {
        states[stateIndex] = newState;
      }
      render();
    };
  }
  function useState(initialState) {
    states[stateIndex] = createState(initialState, stateIndex);
    if (!stateSetters[stateIndex]) {
      stateSetters.push(createStateSetter(stateIndex));
    }
    const _state = states[stateIndex];
    const _setState = stateSetters[stateIndex];
    stateIndex++;
    return [_state, _setState];
  }
  return {
    useState,
  };
  //   let _state=[]
  //   function useState(initialState) {
  //     _state = _state == undefined ? initialState : _state;
  //     return [_state, _setState];
  //   }
  //   const _setState = (newState) => {
  //     if(typeof newState==="function"){
  //         _state=newState(_state)
  //     }else{
  //         _state = newState;
  //     }
  //     render();
  //   };
  //   return {
  //     useState,
  //   };
  function render() {
    stateIndex = 0;
    ReactDOM.render(<App />, document.querySelector("#app"));
  }
})();
const { useState } = MyReact;
function App() {
  const [count, setCount] = useState(0);
  const [flag, setFlag] = useState(false);
  return (
    <div>
      <h1>{count}</h1>
      <h1>{flag ? "打开状态" : "关闭状态"}</h1>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setCount((count) => count - 1)}>-1</button>
      <button onClick={() => setFlag((flag) => (flag = !flag))}>
        {flag ? "关闭" : "打开"}
      </button>
    </div>
  );
}
ReactDOM.render(<App />, document.querySelector("#app"));
相关文章
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
上下文选择器(迭代选择器):基于祖先或同胞元素选择一个元素 ID和类选择器:基于id#和class的属性值进行选择元素。 属性选择器:基于属性的有无和特征进行选择。 ①上下文选择器: 上下文选择器的语法格式:标签1 标签2{属性:值;} //注意:组合选择器和上下文选择器的区别,组合选择器以逗号隔开, 上下文选择器以空格隔开 ②特殊的上下文选择器 子选择器> : 语法格式:标签1>标签2 解释说明:标签1和标签2
252 0
|
6月前
|
前端开发
轻松掌握 React Hooks:简化状态与副作用管理
轻松掌握 React Hooks:简化状态与副作用管理
231 80
|
6月前
|
前端开发
React Hooks数据获取:避免内存泄漏的实战指南
React Hooks数据获取:避免内存泄漏的实战指南
|
2月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
496 83
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
2344 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
840 9
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
前端开发
React Hooks:从基础到进阶的深入理解
React Hooks:从基础到进阶的深入理解
285 2
|
前端开发 JavaScript 算法
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
392 0
|
前端开发 JavaScript API
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
387 0