#javascript #reactjs #jsx #react-props
#javascript #reactjs #jsx #react-props
Вопрос:
Есть ли способ обмениваться данными между родственными компонентами без необходимости возврата компонента, из которого мне нужны данные? вот пример, который лучше объясняет это:
import React from "react";
import "./App.css";
function App() {
return (
<div className="App">
<header className="App-header">
<div>
<h1>Home page</h1>
<Component1 />
<Component2 />
</div>
</header>
</div>
);
}
const Component1 = (props) => {
const importantInfo = "secret-info";
if (props.handleInfo) {
props.handleInfo(importantInfo);
}
return (
<div>
<p>I am component number 1</p>
</div>
);
};
const Component2 = () => {
const handleInfo = (info) => {
console.log(info);
};
return (
<div>
<p>I am component number 2</p>
<Component1 handleInfo={(info) => handleInfo(info)} />
</div>
);
};
export default App;
Я хочу использовать некоторые данные из Component1
in Component2
. Единственный способ, который я нашел для этого, состоял в том, чтобы вернуть component1
inside component2
и поместить props
туда.
Я имею в виду это:
return (
<div>
<p>I am component number 2</p>
<Component1 handleInfo={(info) => handleInfo(info)} />
</div>
Есть ли способ не возвращать компонент и по-прежнему получать данные props
? Я знаю, что могу сделать это с UseContext
помощью и другими методами, но я хочу знать, могу ли я сделать это с помощью props. Спасибо!
Ответ №1:
Что вы можете сделать, так это создать новое App.js
состояние следующим образом:
function App() {
const [commonInfo, setCommonInfo] = useState('information')
return // rest of the code
}
Затем передайте это props
в обоих компонентах как:
return (
<div className="App">
<header className="App-header">
<div>
<h1>Home page</h1>
<Component1 commonInfo={commonInfo} setCommonInfo={setCommonInfo} />
<Component2 commonInfo={commonInfo} setCommonInfo={setCommonInfo} />
</div>
</header>
</div>
);
Таким образом, вы можете деструктировать из props
компонентов следующим образом:
// and also in Component2
const Component1 = (props) => {
const { commonInfo, setCommonInfo } = props
// rest
}
Комментарии:
1. А что, если я не хочу создавать состояние в приложении? есть ли способ передавать реквизиты через функции и не возвращать компонент? (Я задаю тот же вопрос из сообщения)
2. вы против использования контекста?
3. вы могли бы сохранить реквизиты в контексте и передать их таким образом, я считаю, что это было бы лучшим решением. Я не уверен в каком-либо другом способе передачи реквизитов другому компоненту без его возврата