React(9),安卓面试问项目难点

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

count.js

/*

1.该文件是用于创建一个为Count组件服务的reducer,reducer的本质就是一个函数

2.reducer函数会接到两个参数,分别为:之前的状态(preState),动作对象(action)

*/

import {INCREMENT,DECREMENT} from ‘…/constant’

const initState = 0 //初始化状态

export default function countReducer(preState=initState,action){

// console.log(‘countReducer@#@#@#’);

//从action对象中获取:type、data

const {type,data} = action

//根据type决定如何加工数据

switch (type) {

case INCREMENT: //如果是加

return preState + data

case DECREMENT: //若果是减

return preState - data

default:

return preState

}

}

person.js

import {ADD_PERSON} from ‘…/constant’

//初始化人的列表

const initState = [{id:‘001’,name:‘tom’,age:18}]

export default function personReducer(preState=initState,action){

// console.log(‘personReducer@#@#@#’);

const {type,data} = action

switch (type) {

case ADD_PERSON: //若是添加一个人

//preState.unshift(data) //此处不可以这样写,这样会导致preState被改写了,personReducer就不是纯函数了。

return [data,…preState]

default:

return preState

}

}

index.js — 汇总所有的reducer

/*

该文件用于汇总所有的reducer为一个总的reducer

*/

//引入combineReducers,用于汇总多个reducer

import {combineReducers} from ‘redux’

//引入为Count组件服务的reducer

import count from ‘./count’

//引入为Person组件服务的reducer

import persons from ‘./person’

//汇总所有的reducer变为一个总的reducer

export default combineReducers({

count,

persons

})

  • store对象存储

在这里插入图片描述

/*

该文件专门用于暴露一个store对象,整个应用只有一个store对象

*/

//引入createStore,专门用于创建redux中最为核心的store对象

import {createStore,applyMiddleware} from ‘redux’

//引入汇总之后的reducer

import reducer from ‘./reducers’

//引入redux-thunk,用于支持异步action

import thunk from ‘redux-thunk’

//引入redux-devtools-extension

import {composeWithDevTools} from ‘redux-devtools-extension’

//暴露store

export default createStore(reducer,composeWithDevTools(applyMiddleware(thunk)))

  • 创建组件使用store数据在这里插入图片描述

Count

import React, { Component } from ‘react’

//引入action

import {

increment,

decrement,

incrementAsync

} from ‘…/…/redux/actions/count’

//引入connect用于连接UI组件与redux

import {connect} from ‘react-redux’

//定义UI组件

class Count extends Component {

state = {carName:‘奔驰c63’}

//加法

increment = ()=>{

const {value} = this.selectNumber

this.props.increment(value*1)

}

//减法

decrement = ()=>{

const {value} = this.selectNumber

this.props.decrement(value*1)

}

//奇数再加

incrementIfOdd = ()=>{

const {value} = this.selectNumber

if(this.props.count % 2 !== 0){

this.props.increment(value*1)

}

}

//异步加

incrementAsync = ()=>{

const {value} = this.selectNumber

this.props.incrementAsync(value*1,500)

}

render() {

//console.log(‘UI组件接收到的props是’,this.props);

return (

我是Count组件,下方组件总人数为:{this.props.renshu}

当前求和为:{this.props.count}

<select ref={c => this.selectNumber = c}>

1 2 3

 

当前求和为奇数再加 

异步加 

)

}

}

//使用connect()()创建并暴露一个Count的容器组件

export default connect(

state => ({

count:state.count,

personCount:state.persons.length

}),

{increment,decrement,incrementAsync}

)(Count)

Person

import React, { Component } from ‘react’

import {nanoid} from ‘nanoid’

import {connect} from ‘react-redux’

import {addPerson} from ‘…/…/redux/actions/person’

class Person extends Component {

addPerson = ()=>{

const name = this.nameNode.value

const age = this.ageNode.value*1

const personObj = {id:nanoid(),name,age}

this.props.addPerson(personObj)

this.nameNode.value = ‘’

this.ageNode.value = ‘’

}

render() {

return (

我是Person组件,上方组件求和为{this.props.count}

<input ref={c=>this.nameNode = c} type=“text” placeholder=“输入名字”/>

<input ref={c=>this.ageNode = c} type=“text” placeholder=“输入年龄”/>

尾声

一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!

为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!

再次感谢所有给我提供过题目的朋友们,感谢一路有你!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!

为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!

再次感谢所有给我提供过题目的朋友们,感谢一路有你!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-ZMcXyhz0-1713569461482)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值