小草姐 發表於 2020-4-10 17:15:00

react-hooks简单同步异步处理小技巧

<div>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">import React, { useState, useEffect, useReducer } from 'react';
import { useImmer } from "use-immer"
import './App.css';


function reducer(state: { count: number; }, action: { type: any; }) {
switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      throw new Error();
}
}

function App() {
// 定义
const = useImmer({
    people: [
      {
      name: '马云',
      englishName: 'Jack Ma'
      },
      {
      name: '马化腾',
      englishName: 'Pony Ma'
      },
      {
      name: '李彦宏',
      englishName: 'Robin Li'
      }
    ]
})

const = useState(1);

const = useReducer(reducer, {count:999});
useEffect(() =&gt; {
    console.log(num);
    //处理异步数据
}, )

useEffect(() =&gt; {
    console.log(state);
}, ])

const onClick = () =&gt; {
    setNum((num) =&gt; {
      console.log(num,"点击之前的变化");
      //处理异步数据
      return num = 2
    })
}
const onClick1 = () =&gt; {
    setState((state: { people: { name: string; }[]; }) =&gt; { state.people.name = '陈强' })
    console.log(state);//异步
}
const onClick2 = () =&gt; {
    dispatchReducer({ type:"increment"})
    console.log(stateReducer.count);//异步
}
return (
    &lt;div className="App"&gt;
      &lt;h1&gt;我是useReducer----{stateReducer.count}&lt;/h1&gt;
      &lt;h1&gt;{num}&lt;/h1&gt;
      &lt;ul&gt;
      {state.people.map(item =&gt; &lt;li key={item.englishName}&gt;{item.name}&lt;/li&gt;)}
      &lt;/ul&gt;
      &lt;button onClick={onClick}&gt;点击&lt;/button&gt;
      &lt;button onClick={onClick1}&gt;复杂数据处理&lt;/button&gt;

      &lt;button onClick={onClick2}&gt;我要修改stateReducer&lt;/button&gt;
    &lt;/div&gt;
);
}

export default App;
</pre>
</div>
<p>  </p>
</div>

</div>
<div id="MySignature" role="contentinfo">
    一条不甘于平凡的咸鱼分享<br><br>
来源:https://www.cnblogs.com/cq1715584439/p/12674689.html
頁: [1]
查看完整版本: react-hooks简单同步异步处理小技巧