当前位置: 首页 > news >正文

做搜狗网站优化排名证书查询甘肃建设网站

做搜狗网站优化排名,证书查询甘肃建设网站,如何做网站站长,怎么做网络营销在 React 项目中使用 Redux 实现公共下拉选状态共享并通知各组件更新的完整方案如下:1. 安装 Redux 必要依赖 npm install reduxjs/toolkit react-redux2. 创建 Redux Store 和 Slice store/selectSlice.js import { createSlice } from reduxjs/toolkit;const init…

在 React 项目中使用 Redux 实现公共下拉选状态共享并通知各组件更新的完整方案如下:


1. 安装 Redux 必要依赖

npm install @reduxjs/toolkit react-redux

2. 创建 Redux Store 和 Slice

store/selectSlice.js
import { createSlice } from '@reduxjs/toolkit';const initialState = {value: 'default', // 默认值options: [{ value: 'opt1', label: 'Option 1' },{ value: 'opt2', label: 'Option 2' }]
};export const selectSlice = createSlice({name: 'select',initialState,reducers: {setSelectValue: (state, action) => {state.value = action.payload;},updateOptions: (state, action) => {state.options = action.payload;}}
});export const { setSelectValue, updateOptions } = selectSlice.actions;
export default selectSlice.reducer;
store/store.js
import { configureStore } from '@reduxjs/toolkit';
import selectReducer from './selectSlice';export const store = configureStore({reducer: {select: selectReducer}
});

3. 在应用顶层提供 Store

index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { store } from './store/store';
import App from './App';ReactDOM.render(<Provider store={store}><App /></Provider>,document.getElementById('root')
);

4. 创建公共下拉选组件

components/GlobalSelect.js
import { Select } from 'antd';
import { useDispatch, useSelector } from 'react-redux';
import { setSelectValue } from '../store/selectSlice';const GlobalSelect = () => {const dispatch = useDispatch();const { value, options } = useSelector((state) => state.select);return (<Selectvalue={value}onChange={(val) => dispatch(setSelectValue(val))}options={options}style={{ width: 200 }}/>);
};export default GlobalSelect;

5. 在任意子组件中响应状态变化

components/DisplayComponent.js
import { useEffect } from 'react';
import { useSelector } from 'react-redux';const DisplayComponent = () => {const selectValue = useSelector((state) => state.select.value);useEffect(() => {console.log('下拉选值变化:', selectValue);// 这里可以执行数据获取等副作用操作}, [selectValue]);return <div>当前选择: {selectValue}</div>;
};export default DisplayComponent;

6. 在页面中使用(完整示例)

App.js
import GlobalSelect from './components/GlobalSelect';
import DisplayComponent from './components/DisplayComponent';
import AnotherComponent from './components/AnotherComponent';function App() {return (<div style={{ padding: 20 }}><h2>公共区域下拉选</h2><GlobalSelect /><div style={{ marginTop: 50 }}><h3>组件1</h3><DisplayComponent /></div><div style={{ marginTop: 50 }}><h3>组件2</h3><AnotherComponent /></div></div>);
}export default App;

7. 异步数据加载示例(如需要)

// 在需要的地方dispatch异步action
import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { updateOptions } from '../store/selectSlice';const DataLoader = () => {const dispatch = useDispatch();useEffect(() => {const fetchOptions = async () => {const res = await fetch('/api/options');const options = await res.json();dispatch(updateOptions(options));};fetchOptions();}, [dispatch]);return null;
};

关键实现原理说明:

  1. 状态集中管理:所有下拉选相关状态存储在 Redux store 中
  2. 单向数据流
    • 下拉选变更 → dispatch action → store 更新 → 所有订阅组件自动更新
  3. 组件通信
    • 任何组件都可以通过 useSelector 获取最新值
    • 任何组件都可以通过 useDispatch 修改值

性能优化建议:

  1. 精细化订阅:组件只订阅需要的具体值

    // 只订阅value变化(options变化不会触发重渲染)
    const value = useSelector((state) => state.select.value);
    
  2. 使用memo:对子组件进行记忆化

    import { memo } from 'react';
    const MemoizedComponent = memo(DisplayComponent);
    
  3. 批量更新:多个状态变更使用 redux-batched-actions


替代方案对比(Redux vs Context)

特性ReduxContext API
适用场景中大型应用小型应用
调试工具强大的Redux DevTools无内置工具
性能自动浅比较优化需要手动优化
学习曲线较高较低
异步处理内置Thunk/Saga支持需自行实现

对于需要全局共享且频繁更新的状态(如公共下拉选),Redux 仍然是更专业的选择。

http://www.dtcms.com/a/402579.html

相关文章:

  • 邯郸邯山区网站建设设计公司企业文化
  • 南宁做网站开发的公司有哪些wordpress 归档文章
  • 制作网站公司年收入多少免费注册自媒体账号
  • 音频网站模板湖南省城乡建设厅网站
  • 有风格的网站东莞市网络seo推广平台
  • 企业网站一定要备案吗郑州重点工程建设项目
  • 用什么编程语言做网站好南京专门做网站
  • 专业进出口贸易网站光通信网站模板
  • 4k视频素材网站汕头网站建设推荐
  • 网站怎么验证用户是否登陆德州哪个做网站做得好
  • 网络优化有哪些主要流程站内seo的技巧
  • 昭通市有做网站的吗网站的后台是开发做的
  • 创网易邮箱账号哈尔滨seo
  • 平台建站上海网站开发报价
  • 建设一个网站需要哪些费用塘厦企业网站推广公司
  • 网站轮播图片怎么做的分销网站怎么做
  • 九江本土专业网站建设域名解析网站建设
  • 网站建站管理做网站材料
  • 网页建站费用专业定制网站
  • 网站建设经费预算表磁力猫搜索引擎入口官网
  • 求个网站好人有好报百度贴吧网络营销的功能是什么?
  • 免费发帖的网站比亚迪新能源车型及价格
  • 高台县建设局网站移动应用还是网站开发
  • 网站建设方案书安全性建设单位招聘用那个网站
  • 企业自助建站模板做网站需要哪些软件
  • 公司重名 做网站开发网站类型
  • 农药放行单在哪个网站做秦皇岛山海关电力工程招标
  • 联雅网站建设公司网页认证怎么认证
  • 自己做网站能做付费链接吗站外推广方式
  • 网站开发系统源代码网络平台怎么建立网站吗