#reactjs
Вопрос:
У меня есть два компонента Компонент приложения и компонент 2
import Component2 from './Component2';
class App extends Component {
state={data:""}
changeState = () => {
this.setState({data:`state/props of parent component
is send by onClick event to another component`});
};
render(){
return (
<div className="App">
<Component2 data={this.state.data} />
<div className="main-cointainer">
<h2>Compnent1</h2>
<button onClick={this.changeState} type="button">
Send state
</button>
</div>
</div>
);
}}
export default App;
и в Component2.js
const Component2 = (props) => {
return (
<div className="main-cointainer">
<h2>Compnent2</h2>
<p>{props.data} </p>
</div>
)
}
export default Component2;
Здесь я передаю данные из компонента приложения в компонент Component2 . Я хочу, чтобы
компонент 2 не отображался при передаче данных из компонента приложения в компонент Component2 .
Я пытался написать это заявление
{ false amp;amp; <Component2 data={this.state.data} /> }
но из этого ничего не вышло .
Есть какие-либо предложения по выполнению этого типа требований ?
Комментарии:
1. почему вы начинаете условный рендеринг с ложного логического значения? Вы читали соответствующий раздел в документах? reactjs.org/docs/…
2. Вы хотите сказать, что не хотите показывать компонент 2, когда у вас есть некоторые данные в свойстве data?
3. @Dennis, потому что я не хочу отображать компонент 2 в своем приложении, это мое требование .
Ответ №1:
Чтобы скрыть компонент 2 (без изменения его функциональности), добавьте его в div с style = {{display: 'none'}}
App.js
import React from "react";
import "./style.css";
import Component2 from "./Component2";
export default function App() {
return (
<div>
<h1>Hello StackBlitz!</h1>
<p>Start editing to see some magic happen :)</p>
<div style={{ display: "none" }}>
<Component2 myProps="this is a example" />
</div>
</div>
);
}
Проверьте демо-версию : https://stackblitz.com/edit/react-bbxgcr?file=src/App.js
PS : Откройте консоль, чтобы увидеть реквизиты, правильно переданные компоненту 2
Комментарии:
1. Я допустил ошибку, это должно быть сделано для компонента 2 (см. Мой отредактированный ответ)
2. Я не хочу изменять функциональность компонента 2 .
3. @RajGopalbh4 Попробуй мое новое решение
4. Спасибо. ваше новое решение работает хорошо .
Ответ №2:
вы можете сделать это только с одним «если». Если я правильно понял проблему
const Component2 = (props) => {
if(props.data === ""){
return(<div></div>)
}
return (
<div className="main-cointainer">
<h2>Compnent2</h2>
<p>{props.data} </p>
</div>
)
}
export default Component2;
Комментарии:
1. Я не хочу изменять функциональность компонент2
Ответ №3:
Попробуйте использовать отрицание, чтобы просто преобразовать пустую строку в логическое значение.
{ !!this.stat.data amp;amp; <Component2 data={this.state.data} /> }
Если this.stat.data
это пустая строка или ложное значение, то Component2
оно не будет отображаться
Или
Если вы не хотите показывать компонент отображения на странице, попробуйте сделать это
<Component2 data={this.state.data} hidden={true}/>
Компонент 2
const Component2 =({ data, hidden }) => {
return (
<div hidden={hidden}>
<h1>Component2</h1>
</div>
);
}
Добавление hidden
атрибута в HTML-тег скроет элемент на странице.
Комментарии:
1. Я всегда не хочу показывать компонент 2, независимо от того, каким может быть содержание данных .