Javascript 使用ContextAPI不会';无法重新呈现其使用者,但内容已更改。为什么?

Javascript 使用ContextAPI不会';无法重新呈现其使用者,但内容已更改。为什么?,javascript,reactjs,render,context-api,Javascript,Reactjs,Render,Context Api,考虑一下这个小例子。在学习本书的过程中,我用上下文API做了一些实验 const MyContext = React.createContext(0); const D3 = () => { console.log('render D3'); return <MyContext.Consumer>{num => `${num}`}</MyContext.Consumer>; }; const D2 = React.memo(() =>

考虑一下这个小例子。在学习本书的过程中,我用上下文API做了一些实验

const MyContext = React.createContext(0);

const D3 = () => {
    console.log('render D3');
    return <MyContext.Consumer>{num => `${num}`}</MyContext.Consumer>;
};

const D2 = React.memo(() => {
    console.log('render D2');
    return <D3 />;
});

const D1 = React.memo(() => {
    console.log('render D1');
    return <D2 />;
});

const App = () => {
    const [num, setNum] = useState(0);

    console.log('render App');
  return (
    <div>
      <MyContext.Provider value={num}>
        <D1 />
      </MyContext.Provider>
      <input type='button' onClick={() => { setNum(Math.random()) }} />
    </div>);
};

ReactDOM.render(<App />, document.querySelector('#root'));
const MyContext=React.createContext(0);
常数D3=()=>{
console.log('render D3');
返回{num=>`${num}`};
};
const D2=React.memo(()=>{
console.log('render D2');
返回;
});
常数D1=反应备忘录(()=>{
console.log('render D1');
返回;
});
常量应用=()=>{
const[num,setNum]=useState(0);
console.log('render App');
返回(
{setNum(Math.random())}/>
);
};
ReactDOM.render(

将重新呈现。执行此操作可查看:

const D3 = () => {
    console.log('render D3');
    return <MyContext.Consumer>{num => {console.log('CONSUMER'}; return num;}}</MyContext.Consumer>;
};
constd3=()=>{
console.log('render D3');
return{num=>{console.log('CONSUMER'};return num;}};
};

那么,我是否应该认为中的函数可以被假定为另一个函数组件?@Phryxia否。
中的函数是提供者/使用者模式的一部分,本身不是一个组件。请注意,该函数如何接受提供者的值,而不是像函数组件那样的对象。