useState hook возвращает состояние, а также функцию для установки этого состояния. Вы можете передать этот установщик дочернему компоненту и вызвать его оттуда.
const Main = () => {
const [brands, setBrands] = useState([{ name: "John", age: 20 }, { name: "Mary", age: 10 }]);
const updateState = (brand, indexToUpdate) => {
const newState = [...brands];
newState[indexToUpdate] = brand;
setBrands(newState);
};
return brands.map((brand, idx) => <Child brand={ brand } updateState} idx={idx} />)
}
const Child = (props) => {
const { age } = props.brand;
return <button onClick={() => props.setBrands(props.brand, props.idx) } />
}