Изменение состояния компонентов из функции в другом файле

Поместите его в двойные кавычки и избегайте символа $, чтобы избежать специальной интерпретации из shell,

ldapadd -H ldap://localhost -x -w "\$Something18\$" -D "dn=cn=Admin" -f /tmp/file.ldif

(или) [ более рекомендуется ]

Включите его в одну кавычку, чтобы оболочка рассматривала его как литеральную строку без ее расширения,

ldapadd -H ldap://localhost -x -w '$Something18$' -D "dn=cn=Admin" -f /tmp/file.ldif

На странице man bash,

Прикрепленные символы в двойных кавычках сохраняют буквальное значение всех символов в кавычках , за исключением $,, \, и, когда расширение истории включено,!. Символы $ и сохраняют свое особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только тогда, когда за ней следует один из следующих символов: $, `, ', \ или. Двойная кавычка может быть заключена в двойные кавычки, предшествуя ей обратным слэшем. Если включено, будет выполнено расширение истории если в двойных кавычках не будет выведена, а обратная косая черта, предшествующая символу!, не будет удалена.

0
задан H. Juho 26 March 2019 в 18:57
поделиться

1 ответ

Этот способ App.updateUser(json); работает только тогда, когда ваш метод статичен, а в статическом методе у вас нет доступа к this, есть способы добиться этого:

1: [117 ]

вы можете использовать свою функцию входа в систему внутри компонента приложения, например:

class App extends Component {
  state = {
    user: [],
  };

  login = (username, password) => {
    return fetch(loginUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({username, password})
    }).then(response => response.json()).then(data=> {
       this.setState({user: data});
    });
  };


  componentDidMount(data){
    this.login('username', 'password');
  };


  render() {
    return (
        <Router>
            <Nav/>
              <Route exact path="/" component={Login}/>
              <Route exact path="/home" render={(props) => (
                  <Home {...props} picArray={this.state.picArray}/>
              )}/>
              <Route exact path="/profile" component={Profile}/>
              <Route exact path="/single/:id" component={Single}/>
        </Router>
    );
  }
}


export default App;

примечание:

, а также вы можете упростить метод входа в систему с помощью Async / await, например:

  login = async (username, password) => {
    const response =  await fetch(loginUrl,
         { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({username, password})
    });
    const user =  await response.json();
    this.setState({ user });
  };

примечание:

и вы также можете сделать это:

import { login } from 'MediaAPI.js';

class App extends Component {
  state = {
    user: [],
  };

  async componentDidMount(data){
    const user = await login('username', 'password');
    this.setState({ user });
  };


  render() {
    return (
        <Router>
            <Nav/>
              <Route exact path="/" component={Login}/>
              <Route exact path="/home" render={(props) => (
                  <Home {...props} picArray={this.state.picArray}/>
              )}/>
              <Route exact path="/profile" component={Profile}/>
              <Route exact path="/single/:id" component={Single}/>
        </Router>
    );
  }
}


export default App;

MediaAPI.js

   export const login = (username, password) => {
      return fetch(loginUrl, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({username, password})
      }).then(response => response.json());
    };

2: [118 ]

вы можете создать компонент и в этом компоненте использовать App и установить для него ref, а затем использовать метод updateUser.

---- есть и другие способы, но я думаю, что эти два лучше.

0
ответ дан Mohammad Rajabloo 26 March 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: