A ideia é de colocar o estado do Input.js dentro do contexto para eu conseguir ter um componente menos acoplado para quando eu fizer manutenção, porém eu não consigo obter os valores dele utilizando o useContext em Footer.js, alguém sabe me dizer o porque?
Obs: Eu abstrai o máximo de código possível do original para deixar apenas o necessário para o entendimento do meu problema.
Footer.js
export default function Footer() {
const { input } = useContext(ContextInput);
function onSubmit(event) {
event.preventDefault();
// Lógica de guardar mensagem no backend
// Utilizarei a variável input (contexto) aqui dentro
}
return (
<InputProvider >
<div className="footer_container">
<div className="footer_Logo">
<Link to='/' >Logo </Link>
</div>
<form className="footer_form"
onSubmit={(event) => onSubmit(event)} >
<Input
type='text'
placeholder='Nome' />
<ButtonAzul text='Enviar mensagem' />
</form>
</div>
</InputProvider>
)
}
ContextInput.js
export const ContextInput = createContext({});
export function InputProvider({ children }) {
const [input, setInput] = useState({
'text': '',
'email': '',
'password': '',
'number': 0
});
return (
<ContextInput.Provider value={{ input, setInput }}>
{ children }
</ContextInput.Provider>
)
}
Input.js
export default function Input({ type, placeholder }) {
const { input, setInput } = useContext(ContextInput);
function inputHandler(event) {
const inputValue = event.target.value;
if (type) {
// Lógica de enviar as informações via setInput, exemplo:
setInput({ ...input, 'text': inputValue });
}
}
return (
<input className="form_input"
type={type}
placeholder={placeholder}
onChange={(event) => inputHandler(event)}
/>
)
}