php - 如何将服务器数据传递给 React 组件

标签 php reactjs

我刚刚开始学习 React,虽然我了解许多基础知识,但有一个概念我还没有看到任何人涉及:如何获取通过服务器端语言(例如 PHP)加载的信息并在何时使用它加载 React View ?

我本来希望在我的 php View 中调用 RenderDom,例如:

// In the pre-compiled JSX file
var Greeting = React.createClass({
    render: function() {
        <div>
            <h1>Hello, { this.props.username }</h1>
        </div>
    }
});

// In my PHP view
<script type="text/jsx">
    ReactDOM.render( <Greeting username="<?php echo $username; ?>"/>, document.body );
</script>

但这行不通;什么都没有显示。我在想那是因为 text/jsx 脚本区域没有被执行...但是当然如果我删除它就会出现语法错误。

Soo...我只是想知道,从数据库加载数据并将其传递到 React 组件的典型方法是什么?

最佳答案

方法一:定义一个全局变量。

在您的主 PHP 文件中:

<script>
    window.reactInit = {
        username: <?php echo $username; ?>
    };
</script>

在你的组件中:

class Greeting extends React.Component {
    constructor(props) {
        super(props);
        this.username = reactInit.username;
    }
}

如果你使用 Redux,你可能会发现这个方法特别有用。因为您的任何 reducer 都可以在构建初始状态期间访问此全局变量。

方法二:使用data-*属性。

<div id="app" data-username="<?php echo $username; ?>"></div>

所有 data-* 属性都使用 {...app.dataset} 传递。

const app = document.getElementById('app');
ReactDOM.render(<Greeting {...app.dataset} />, app);

现在您可以像普 channel 具一样访问您的服务器数据。

class Greeting extends React.Component {
    constructor(props) {
        super(props);
        console.log(this.props.username);
    }
}

这种方法没有前一种那么灵活,但似乎更符合 React 哲学。

关于php - 如何将服务器数据传递给 React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370109/

相关文章:

php - 如何从 mysql_fetch_assoc 捕获变量

php - 为什么 laravel 返回类不存在错误?然而一切似乎都很好

PHP Google Contact API 生成 HTTP/1.0 401 需要授权

reactjs - 如何动态改变getFieldDecorator的提示文本?

javascript - 同时设置多个(相互依赖的)状态值

php - 移动浏览器的 Javascript/PHP 页面超时

php - 如何使用magento2中的自定义模型将数据保存到自定义表

ruby-on-rails - 在 Rails 中命名 React 组件文件时,前导下划线有什么区别?

reactjs - React Material-Table 如何传递 rowData 参数?

javascript - 如何获取当前item的id?