cssCopy codeexport SearchInfo

lxf2023-07-20 02:30:01

此次每日任务是促进热搜词模块规划布局展现控制系统。

1. 基本上合理布局

1.1 受欢迎输入框

在合理布局环节中,我们不难发现受欢迎输入框并没有出现。这可能是因为外界部件存有 overflow: hidden 特性所导致的,所以我们应该给一个相对高度解决这些问题:

cssCopy code
export const SearchInfo = styled.div`
  position: absolute;
  left: 0;
  top: 56px;
  width: 240px;
  height: 100px;
  padding: 0 20px;
  background: green;
`;

下面,我们可以通过简书官网调节的办法补齐别的特性。

1.2 热搜词Title和换一换标志

下面,我们应该加上热搜词Title和换一换标志。

cssCopy code
export const SearchInfoTitle = styled.div`
  margin-top: 20px;
  margin-bottom: 15px;
  line-height: 20px;
  font-size: 14px;
  color: #969696;
`;

随后必须完成换一换的功效。

1.3 受欢迎Tag

还需要加上受欢迎Tag的样式:

cssCopy code
export const SearchInfoItem = styled.a`
  display: block;
  float: left;
  line-height: 20px;
  padding: 0 5px;
  font-size: 12px;
  border: 1px solid #ddd;
  color: #969696;
  border-radius: 2px;
  margin-right: 10px;
  margin-bottom: 15px;
`;

可是这个时候发觉相对高度出现了问题了,因而我们应该在表层合理布局进行调整:

cssCopy code
export const SearchWrapper = styled.div`
  position: relative;
  float: left;
  .iconfont {
    position: absolute;
    right: 5px;
    bottom: 5px;
    width: 30px;
    height: 30px;
    line-height: 30px;
    border-radius: 15px;
    text-align: center;
    &.focused {
      background: #777;
      color: #fff;
    }
  }
  .slide-enter {
    transition: all 0.2s ease-out;
  }
  .slide-enter-active {
    width: 240px;
  }
  .slide-exit {
    transition: all 0.2s ease-out;
  }
  .slide-exit-active {
    width: 160px;
  }
`;

export const SearchInfo = styled.div`
  position: absolute;
  left: 0;
  top: 56px;
  width: 240px;
  padding: 0 20px;
  background: green;
`;

与此同时,我们将要上边 SearchInfo 写死高度除掉。

2. 操纵展现

官方文档叙述了 SearchInfo 地区需要在电脑鼠标对焦时表明,失去焦点时掩藏。我们通过操纵 SearchInfo 地区来达到这个思路,并且这个控制逻辑与以往用以操纵动画主要参数十分相似。

cssCopy codeexport SearchInfo

3. 应用 Ajax 要求获得 Tag 数据信息

事实上,受欢迎 Tag 的信息是以网络服务器获得的。致力于通过 Ajax 来获得这些信息,如同简书网站一样。并且我们只需在第一次对焦时读取数据,然后再进行本地缓存。

这时,我们应该将 header 里的目录信息进行存放,为了后面开展状态管理。原始时,它是一个空数组。

3.1 应用 redux-thunk 回到函数公式

当 Nav 对焦时,我们应该获得 Ajax 数据信息。因为这是一个异步操作,因此需要应用第三方库。大家统一应用 redux-thunk 来操作,将异步操作放到 action 中解决。

应当在建立 store 时进行 redux-thunk:

cssCopy codeexport SearchInfo

下面,我们应该发放多线程 action:

cssCopy codeexport SearchInfo

随后建立这一 Action:

cssCopy codeexport SearchInfo

假如需要用到 Ajax,则需要用到第三方库 axios 来达到异步请求:

import axios from 'axios';

export const getList = () => { return (dispatch) => { // 异步请求 axios.get('/api/headerList.json').then(()=>{
    }).catch(()=>{
        console.log('error');
    });
}
};

当后面数据信息还没开发设计结束时,我们可以用前面制作出来的假数据。我们可以用 create-react-app 的特点,在 public 和 src 目录下创建一个相对应的 JSON 文档,之后就可以访问了。在这段时间,路由器也要进行调整,便于完成假数据。

随后,我们应该改动 state。我们应该在回调函数中发放一个新的 action:

const changeList = (data) => ({ type: constants.CHANGE_LIST, data });

export const getList = () => { return (dispatch) => { // 异步请求 axios.get('/api/headerList.json').then((res) => { const data = res.data; dispatch(changeList(data.data)) }).catch(()=>{ console.log('error'); }); } };

3.2 应用 Immutable 的二维数组开展 state 统一升级

下面,我们应该在 reducer 中依据获得的 data 升级 list。但是有一点应注意:使用 fromJS() 方式将 list 变成了一个 Immutable 二维数组。可是,在我们启用 state.set() 方式来改变 list 时,action.data 本身就是一个普通的二维数组,这几种基本数据类型不一样会有不正确。因而,我们应该将 data 转换成 Immutable:

cssCopy codeexport SearchInfo

随后,我们能按如下所示方法撰写 reducer:

cssCopy codeexport SearchInfo

3.3 应用 map 方式循环系统展现具体内容

最终,需要把数据展现出去。可以用 map 方式来遍历数组,并3D渲染目录项:

javascriptCopy code
getListArea(show) {
  if (show) {
    return (
      <SearchInfo>
        <SearchInfoTitle>
          热搜词
          <SearchInfoSwitch>
            换一批
          </SearchInfoSwitch>
        </SearchInfoTitle>
        <SearchInfoList>
          {this.props.list.map((item) => {
            return <SearchInfoItem key={item}>{item}</SearchInfoItem>;
          })}
        </SearchInfoList>
      </SearchInfo>
    );
  } else {
    return null;
  }
}

即便是应用 immutable 二维数组,也可以用 map 方式进行赋值。

4. 提升 reducer

以前的 reducer 广泛使用 if 句子,能通过应用 switch-case 进行改善:

cCopy code
export default (state = defaultState, action) => {
  switch (action.type) {
    case constants.SEARCH_FOCUS:
      return state.set('focused', true);
    case constants.SEARCH_BLUR:
      return state.set('focused', false);
    case constants.CHANGE_LIST:
      return state.set('list', action.data);
    default:
      return state;
  }
};

应用 switch-case 能让 reducer 编码更加清晰通俗易懂。

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!