【问题标题】:No update component react hooks context没有更新组件反应钩子上下文
【发布时间】:2021-08-07 18:15:12
【问题描述】:

"AdicionaItem"函数没有重新加载组件"Items.tsx"的地图,为什么?

const { transacao } = useContext(TransacaoContext);
return (
   transacao.itens.map(({descricao}: TransacaoItens) => (<h1>{descricao}</h1>)
);

const [transacao, setTransacao] = useState<Transacao>(transacaoInicial);

function AdicionaItem(item: TransacaoItens) {
        let novosValores = transacao;
        novosValores.itens = [...novosValores.itens, item];
        setTransacao(novosValores);
    }

const { AdicionaItem } = useContext(TransacaoContext);

function Adiciona(){
   AdicionaItem({descricao: "Teste"});
};

【问题讨论】:

    标签: reactjs typescript react-hooks context-api


    【解决方案1】:

    你的 useState 钩子在你的功能组件之外。尝试将其移动到 AdicionaItem 内:

    
    function AdicionaItem(item: TransacaoItens) {
            const [transacao, setTransacao] = useState<Transacao>(transacaoInicial);
            let novosValores = transacao;
            novosValores.itens = [...novosValores.itens, item];
            setTransacao(novosValores);
        }
    

    【讨论】:

    • Hyetigran,“const transacao”用于其他功能,例如:“RemoveItem”
    • 在这种情况下,您需要将 transacao 和 setTransacao 作为 AdicionaItem 的 props 传递。然后将你的使用状态移动到一个父组件,它看起来像Adiciona。您还需要将上述状态传递给所有子组件。这称为提升状态,因为有几个兄弟组件依赖它。
    猜你喜欢
    • 2021-10-26
    • 2021-11-12
    • 2020-09-29
    • 2020-07-17
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多