美文网首页
新手在React中遇到的问题

新手在React中遇到的问题

作者: AMONTOP | 来源:发表于2019-06-10 18:25 被阅读0次

    1、construtor里可以有什么?

    constructor(props) {
      super(props);
      this.state = {searchStr: ''};
      this.handleChange = this.handleChange.bind(this);
    }
    

    但是在应用hook时,不能把hook中的useState写入construtor

    3、当有两个state,取得是哪个state?


    image.png

    4、state的更新可能是异步的

    this.setState((state, props) => ({
      counter: state.counter + props.increment
    }));
    

    5、function组件 无状态函数式组件,顾名思义,无状态,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。

    其实无状态函数式组件也是官方比较推荐的一种方式,尽量让底层的组件变成无状态函数式组件,也即组件尽量只用来显示数据,把数据操作的逻辑都放在顶层,然后从顶层把数据传到底层

    6、Hook 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

    
    import React, { useState } from 'react';
      function Example() {
        const [count, setCount] = useState(0);
        return (
          <div>
            <p>You clicked {count} times</p>
            <button onClick={() => setCount(count + 1)}>
             Click me
           </button>
          </div>
        );
      }
    
    function ExampleWithManyStates() {
      // 声明多个 state 变量
      const [age, setAge] = useState(42);
      const [fruit, setFruit] = useState('banana');
      const [todos, setTodos] = useState([{ text: '学习 Hook' }]);
    

    7、如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。

    useEffect 做了什么? 通过使用这个 Hook,你可以告诉 React 组件需要在渲染后执行某些操作。React 会保存你传递的函数(我们将它称之为 “effect”),并且在执行 DOM 更新之后调用它

    自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook

    在多个 Hook 之间传递信息:

    8、如果你在接触 Hook 前已经对 context API 比较熟悉,那应该可以理解,useContext(MyContext) 相当于 class 组件中的 static contextType = MyContext 或者 <MyContext.Consumer>。

    useContext(MyContext) 只是让你能够读取 context 的值以及订阅 context 的变化。你仍然需要在上层组件树中使用 <MyContext.Provider> 来为下层组件提供 context。

    9、可以运用useEffect来产生一系列的效应,当其值改变时,相关的事件等也发生相应的反应,
    可以这样设置,监控items的变化

     const [items, setItems] = useState({count: 10, offset: 0});
      useEffect(() => {
        getItems(items);
      }, [items]);
    

    10、function组件中没有this指向,在class组件中就必须有this指向

    11、只在最顶层使用 Hook
    不要在循环,条件或嵌套函数中调用 Hook
    例如:出现的错误在 循环中使用useState设置

    12、在a标签中onClick自动执行的问题:
    如:在利用antd ui框架的Table时

    // 根据获得的id值,获取单条数据
      function onDetailList(value){
        console.log(value.uid);
        try {
          console.log("click");
          dispatch({
            type: 'pending/getOnePending',
            payload: {
              uid: value.uid,
              id: 3,
            }
          })
        }catch (e) {
          console.log(e);
        }
      };
    /* 表格start */
      const columns = [
        {
          title: '序号',
          dataIndex: 'sortNum',
          key: 'sortNum'
        },
        {
          title: '账户名',
          dataIndex: 'username',
          key: 'username',
        },
        {
          title: '手机号',
          dataIndex: 'mobile',
          key: 'mobile',
        },
        {
          title: '认证时间',
          dataIndex: 'create_time',
          key: 'create_time',
        },
        {
          title: '类型',
          key: 'class',
          dataIndex: 'class',
        },
        {
          title: '操作',
          dataIndex: 'id',
          key: 'id',
          render: ( text,record ) => {
            // console.log(record);
            return (<a href=" javascript:void(0);" onClick={() => onDetailList(record)}>详情</a>)
          }
        }
      ];
    

    如果在onClick中直接写成如下,会在渲染页面时自动执行函数

    onClick= { onDetails(record) }
    

    若不想直接执行,可以直接onClick= {onDetails}或者采用上面onClick={() => onDetailList(record)}这种方式

    本文如有错误,麻烦大家及时指出,谢谢啦!!!!

    相关文章

      网友评论

          本文标题:新手在React中遇到的问题

          本文链接:https://www.haomeiwen.com/subject/tzqcxctx.html